it-swarm.com.ru

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

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

Вот код функции обратного вызова:

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

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

16
Mike

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

Директива использования:

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

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

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

Просто используйте:

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

Этот пример из руководства разработчика AngularJS очень похож на ваш случай: http://plnkr.co/edit/hYBxk070sgw54RElyWNq?p=preview

1
Joy

Следующий код проверен и работает ..

Directive call in html

<taxcode-picker call-back-fun="calculate_tax(a, b)"></taxcode-picker>

Пример директивы код

{
scope:'&',
link: function (scope, element, attrs) {
 scope.tax = {amount:12, rate:10.50};
 scope.obj = {number:12, value:10};

  scope.call_back = function (tax) {
    scope.callBackFun({a:tax, b:obj});
  }
}

}

Образец контроллера

app.controller("sample", function($scope){
$scope.calculate_tax = function (tax, obj) {

        console.log("tax "+JSON.stringify(tax));

        console.log("obj "+JSON.stringify(obj));
    }
});
0
Dinesh Vaitage