У меня есть контроллер, который ссылается на директиву. Директива имеет свой собственный контроллер. Моя директива имеет ng-file-upload (это другая директива сама по себе).
У меня есть некоторые поля в директиве, которые необходимо передать в виде массива на главный контроллер. Как мне это сделать?
Ура!
Возможно, вы используете область выделения в своей директиве? Вы можете использовать =
для привязки значения области видимости к области управления следующим образом:
angular.module('appName').directive('directiveName', function() {
return {
restrict:'E',
scope: { boundScopeValue : '=' },
link: function(scope) {
scope.boundScopeValue = 'Beam me up scotty!';
}
}
}
Для получения дополнительной информации об изоляционной сфере и различных методах выделения, ознакомьтесь с ответами на этот большой вопрос SO: В чем разница между "@" и "=" в области действия в AngularJS?
Еще один отличный вариант - также определить функцию в вашем контроллере, а затем вызвать ее в своей директиве, когда вы хотите передавать значения и делать что-то в контроллере.
Isolate Scope будет лучшим выбором для отображения элементов внешней области видимости внутри внутренней области директивы.
Тем не менее, пример для второго варианта приведен ниже.
<div ng-controller="MyCtrl">
<div my-directive callback-fn="ctrlFn(arg1)"></div>
</div>
var app = angular.module('myApp',[]);
app.directive('myDirective', function() {
return {
scope: { someCtrlFn: '&callbackFn' },
link: function(scope, element, attrs) {
scope.someCtrlFn({arg1: 22});
},
}
});
app.controller('MyCtrl', function($scope) {
$scope.ctrlFn = function(test) {
console.log(test);
}
});