Angular: Aufruf der Controller-function innerhalb einer directen Link-function mit &

Wir stoßen auf ein Problem beim Versuch, eine in eine Direktive übergebene function aufzurufen, indem wir das Ampersand ‘&’ in der Verknüpfungsfunktion unserer Direktive verwenden.

Es scheint, dass die function auf dem Controller aufgerufen wird, aber keine Argumente in dem Aufruf übergeben werden. Alle Beispiele, die wir gesehen haben, betreffen das Durchreichen, indem Sie einen Anruf in der Vorlage erstellen. Gibt es eine Möglichkeit, eine function für Ihre Direktive aus ihrer Vorlage aufzurufen, dann etwas in der Direktive tun, die die Controller-function aufruft?

   

Übergeben Sie die Argumente in {} s? ZB in der Verknüpfungsfunktion der Direktive möchten Sie die Methode wie 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); } } 

Geige .

Zusätzlich zu Marks Antwort möchte ich darauf hinweisen, dass Sie mit der & Kurzschrift einige Buchstaben sparen können. Dies setzt voraus, dass der callback-fn auf den in Ihrem HTML- scope.callbackFn als scope.callbackFn in Ihrem Bereich vorhanden ist. Alles andere ist immer noch das Gleiche, daher müssen nur zwei Zeilen geändert werden. Ich habe Marks Version als Kommentar gehalten, so dass Sie den Unterschied leicht erkennen können.

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