2017-02-24 1 views
-1

I Angular 1.2 bin mit und eine Funktion in einer Richtlinie festgelegt haben:Aufruf einer Funktion innerhalb einer Richtlinie definiert

.directive(
'Derp', 
function() { 
    return { 
     restrict: 'C', 
     link: function(scope, element, attrs) { 
      scope.$parent.sum = function() { 
       //something 
      } 
     }) 
} 
}) 

von meinem Haupt-Controller wie dieses Ich rufe diese Funktion:

$scope.sum(); 

Aber ich immer diese Fehlermeldung im Browser-Konsole:

TypeError: $scope.sum is not a function 

bin ich etwas falsch zu bekommen?

+0

Sie die Funktion definiert im Rahmen der Richtlinie nicht die Hauptsteuerung; daher der Grund, warum es es nicht finden kann. Gibt es einen Grund, warum Sie hier die Funktion definieren und nicht im Hauptcontroller? –

+0

Ja, ich muss die Funktion in der Direktive wegen einer Bibliothek lassen, die ich benutze. Jedenfalls habe ich den obigen Code bearbeitet, weil ich das "$ parent" in der Funktionsdefinition vergessen habe. Mein Fehler. – Andrew

+0

Sich auf die Hierarchie der Bereiche zu verlassen, ist ein fehlerhaftes Muster, das derzeit nicht als "Best Practice" gilt. Die genaue Lösung hängt davon ab, wie die Richtlinie und die Summe verwendet werden. – estus

Antwort

0

binden Sie es an den Bereich in Ihrer Link-Funktion.

zugreifen es genau wie ng-click="sum()"

link : function(scope, element, attrs) { 
    // Scope Variables 
    scope.sum = sum; 

    function sum(){ 
    //something 
    } 
} 
Verwandte Themen