Подтвердить что ты не робот

Передача функции обратного вызова в директиву

Я пытаюсь передать функцию обратного вызова из контроллера в директиву.

Здесь код функции обратного вызова:

$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'

Я видел много подобных вопросов, но не мог понять, где я ошибаюсь.

4b9b3361

Ответ 1

При вызове метода выражения из директивы вам необходимо передать параметр из директивы в формате JSON, также вы должны исправить значение атрибута директивы callback для передачи функции типа callback="onImageSelect(image)"

Использование директивы:

<google-image-search callback="onImageSelect(image)" />

Шаблон директивы

<a data-ng-click="callback({image: url})"></a>

Ответ 3

Многие разработчики AngularJs уже знают о директивах AngularJs и, вероятно, знают о области действия и ее методах.

Как вам известно, существуют 3 метода облачности Directular: "@", "=", "&", но теперь мы поговорим только о "&". метод. Мы увидим, как мы можем реализовать метод '&' в наших приложениях.

Когда мы определяем какую-либо функцию внутри текущей области действия и хотим реализовать ее в любых директивах, помните одну вещь: вы должны обратить внимание на аргументы функции и их порядок. Если вы хотите больше, вот о ней отличная статья:

http://www.w3docs.com/snippets/angularjs/angularjs-directive-scope-method.html

Ответ 4

попробуйте изменить объект области видимости таким образом

scope: {
        callback: '='
    }

и он будет работать