Передача функции обратного вызова в директиву
Я пытаюсь передать функцию обратного вызова из контроллера в директиву.
Здесь код функции обратного вызова:
$scope.onImageSelect = function(image) {
alert('SET');
$scope.card.image = image;
};
Использование директивы:
<google-image-search callback="onImageSelect" />
Код директивы:
ngmod.directive('directive', function() {
return {
templateUrl: '/templates/template.html',
scope: {
callback: '&'
}
}
});
Использование обратного вызова в шаблоне:
<a data-ng-click="callback(url)"></a>
Однако это дает мне следующую ошибку:
TypeError: Cannot use 'in' operator to search for 'onImageSelect'
Я видел много подобных вопросов, но не мог понять, где я ошибаюсь.
Ответы
Ответ 1
При вызове метода выражения из директивы вам необходимо передать параметр из директивы в формате JSON
, также вы должны исправить значение атрибута директивы callback
для передачи функции типа callback="onImageSelect(image)"
Использование директивы:
<google-image-search callback="onImageSelect(image)" />
Шаблон директивы
<a data-ng-click="callback({image: url})"></a>
Ответ 2
Просто используйте:
<google-image-search callback="onImageSelect(image)" />
Этот пример из Руководство разработчика AngularJS очень похож на ваш случай: http://plnkr.co/edit/hYBxk070sgw54RElyWNq?p=preview
Ответ 3
Многие разработчики AngularJs уже знают о директивах AngularJs и, вероятно, знают о области действия и ее методах.
Как вам известно, существуют 3 метода облачности Directular: "@", "=", "&", но теперь мы поговорим только о "&". метод. Мы увидим, как мы можем реализовать метод '&' в наших приложениях.
Когда мы определяем какую-либо функцию внутри текущей области действия и хотим реализовать ее в любых директивах, помните одну вещь: вы должны обратить внимание на аргументы функции и их порядок. Если вы хотите больше, вот о ней отличная статья:
http://www.w3docs.com/snippets/angularjs/angularjs-directive-scope-method.html
Ответ 4
попробуйте изменить объект области видимости таким образом
scope: {
callback: '='
}
и он будет работать