Угловая: вызов функции controllerа внутри функции директивной ссылки с использованием &
Мы сталкиваемся с проблемой, связанной с вызовом функции, переданной в директиву, с использованием амперсанда ‘&’ в функции ссылок нашей директивы.
Кажется, функция вызывается на controllerе, но в вызове не передаются аргументы. Все примеры, которые мы видели, include прохождение через создание вызова в шаблоне. Есть ли способ вызвать функцию из вашей директивы из своего шаблона, а затем сделать что-то в директиве, которая вызывает функцию controllerа, переданную в нее?
- Как установить фокус на поле ввода?
- Несколько директив , запрашивающих новую / выделенную область
- Многоуровневые таблицы (внутри другого при нажатии)
- Угловая JS: Какова потребность в функции ссылки директивы, когда у нас уже есть controller директивы с объемом?
- Пользовательская форма проверки валидации для сравнения двух полей
- Угловые директивы - когда и как использовать компиляцию, controller, предварительную ссылку и пост-ссылку
- Угловая директива, как добавить атрибут к элементу?
- Недопустимое использование директивы ngTransclude в шаблоне
- Предварительный просмотр изображения перед загрузкой Angularjs
- Чтобы проверить настраиваемую директиву angularjs validation
- Угловое название директивы: допускаются только строчные буквы?
- Как автокапитализировать первый символ в поле ввода в AngularJS?
- Установите фокус на первый недопустимый ввод в форме AngularJs
Вы передаете аргументы внутри {}
s? Например, внутри функции ссылки директивы вы хотите вызвать метод следующим образом: scope.someCtrlFn({arg1: someValue});
app.directive('myDirective', function() { return { scope: { someCtrlFn: '&callbackFn' }, link: function(scope, element, attrs) { scope.someCtrlFn({arg1: 22}); }, } }); function MyCtrl($scope) { $scope.ctrlFn = function(test) { console.log(test); } }
Скрипт .
В дополнение к ответу Марка я хотел бы указать, что вы можете сэкономить несколько писем с помощью &
сокращения. Это предполагает, что callback-fn
, указанный в вашем HTML, существует как scope.callbackFn
в вашей области. Все остальное по-прежнему остается прежним, поэтому есть всего две строки для изменения. Я сохранил версию Марка в качестве комментариев, так что вы сможете легко разглядеть разницу.
app.directive('myDirective', function() { return { scope: { callbackFn: '&' }, //scope: { someCtrlFn: '&callbackFn' }, link: function(scope, element, attrs) { scope.callbackFn({arg1: 22}); //scope.someCtrlFn({arg1: 22}); }, } }); function MyCtrl($scope) { $scope.ctrlFn = function(test) { console.log(test); } }