it-swarm.com.de

Rückruffunktion an Direktive übergeben

Ich versuche, eine Rückruffunktion von einer Steuerung an eine Anweisung zu übergeben.

Hier ist der Callback-Funktionscode:

$scope.onImageSelect = function(image) {
    alert('SET');
    $scope.card.image = image;
};

Verwendung der Richtlinie:

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

Richtliniencode:

ngmod.directive('directive', function() {
    return {
        templateUrl: '/templates/template.html',
        scope: {
            callback: '&'
        }
    }
});

Callback-Verwendung in der Vorlage:

<a data-ng-click="callback(url)"></a>

Dies gibt mir jedoch den folgenden Fehler:

TypeError: Cannot use 'in' operator to search for 'onImageSelect'

Ich habe viele ähnliche Fragen gesehen, konnte aber nicht verstehen, wo ich mich irre. 

16
Mike

Beim Aufruf der Ausdrucksmethode aus der Direktive müssen Sie den Parameter aus der Direktive im JSON-Format übergeben. Außerdem sollten Sie den Wert der Direktive callback des Attributs korrigieren, damit die Funktion wie callback="onImageSelect(image)"

Verwendung der Richtlinie:

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

Vorlage für Richtlinien

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

Verwenden Sie einfach:

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

Dieses Beispiel aus AngularJS Developer Guide ist Ihrem Fall sehr ähnlich: http://plnkr.co/edit/hYBxk070sgw54RElyWNq?p=preview

1
Joy

Der folgende Code wird getestet und funktioniert ..

Directive call in html

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

Beispiel für einen Richtliniencode

{
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});
  }
}

}

Sample Controller

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