У меня есть пользовательская директива в Angular
, которая должна вызывать функцию в контроллере, передавая некоторые данные. Код для контроллера и директивы ниже. В моей директиве, когда я вызываю scope.modify(data);
, он вызывает функцию в контроллере, но, похоже, не передает данные (он печатает данные как undefined). Почему это?
В моем контроллере есть функция modify()
с некоторой логикой:
$scope['modify'] = function(data) {
var obj = $scope['template']();
console.log(data);
// ... do stuff with data
}
Я вызываю его из своей директивы, которая считывает данные из файла.
app.directive("modifyBtn", function($compile) {
return {
restrict: "E",
scope: {
modify:"&"
},
link: function(scope, element, attrs) {
var fileElem = angular.element(element.find("#file_input2"));
var upload = function() {
var file = fileElem[0].files[0];
var reader = new FileReader();
reader.readAsText(file);
reader.onload = function(e) {
var data = {};
// read JSON content from file and store as data
console.log(data); // prints correct data
scope.modify(data);
}
};
$(fileElem).on("change", upload);
}
}
});
Наконец, вот моя директива со стороны просмотра в HTML
:
<modify-btn modify="modify()">
<li class="active">
<span class="btn creation-btn" ng-click="fileshow = true">
Upload JSON
</span>
</li>
<li>
<input type="file" id="file_input2" ng-show="fileshow" />
</li>
</modify-btn>