AngularJS-Direktive mit der Methode von außerhalb aufgerufen
Ich erstellt eine Richtlinie mit einer Methode, die aufgerufen werden soll von anderen Elementen, die nicht Teil der Richtlinie. Aber wie es aussieht, ist diese Methode nicht ausgesetzt.
Einige Beispiel-jade-code zu klären:
//- a controller for the view itself
div(ng-controller="someController")
//- this is part of the view itself, not within the directive
div(ng-repeat="element in elements")
div(ng-click="methodFromDirective(element)") click element {{$index}} to trigger directive
//- this is the directive
div(some-directive)
Den someController
ist nicht allzu wichtig hier, denke ich. Es verfügt über Methoden, aber NICHT die methodFromDirective(element)
ein. Die methodFromDirective(element)
ist eine Methode, die existiert nur in der Richtlinie.
Wenn ich eine Richtlinie und legte einige logging auf die Schaffung ich kann deutlich sehen, dass es erstellt. Aber die methodFromDirective(element)
Methode, nicht ausgesetzt, so dass die Anrufe nicht korrekt ausgelöst.
Den methodFromDirective(element)
sich nur an Elemente aus der Richtlinie Vorlage.
einige coffeescript zu zeigen, die definition der Richtlinie (ignorieren Einrückung Fehler hier):
'use strict'
define [], () ->
someDirective = () ->
restrict: 'A'
scope: {
show: '='
}
transclude: false
templateUrl: 'someTemplateHere.html'
controller = ($scope) ->
# exposing the method here
$scope.methodFromDirective(element)->
$scope.theMethod element
link = (scope, element, attr) ->
# this is logged
console.log "init someDirective"
# triggering this method form outside fails
scope.theMethod = (element)->
console.log "method triggered with element", JSON.stringify(element)
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich fand mein Problem.
Vom der angularJS Dokumentation über Richtlinien, ich war auf der Suche in die
transclude
option da, die besagt:Kombinierte ich
transclude=false
mit dercontroller
Funktion, da durch die Methode, wieder von docs:Jedoch , was ich komplett verpasst, war, dass ich isoliert Umfang innerhalb meines Richtlinie. Von docs:
So, selbst wenn Sie
transclude=false
und diecontroller
Funktion werden Sie immer noch nicht, setzen Methoden, wenn Sie isoliert Umfang! Lektion gelernt!Während herauszufinden, was schief ging, habe ich auch eine Geige zum besseren Verständnis: http://jsfiddle.net/qyBEr/1/
html
javascript
methodInDirective()
aus jedem JS auf der SeitemethodInDirective
direkt auf die link-Funktion zu. Also im Grunde Ihre Richtlinie Methoden, um die Eltern-scope. nicht sicher, wie das ist ratsam tho :/transclude
hier relevant ist. Dieses Beispiel funktioniert, obtransclude
ist wahr oder falsch, richtig?Aufruf von privaten Methoden innerhalb der Richtlinie die link-Funktion ist sehr einfach
wo
Können Sie anrufen Richtlinie-Funktion sogar vom Weltraum aus.
Standardmäßig wird der Anwendungsbereich der Richtlinie ist false Bedeutung der Richtlinie wird die Verwendung des übergeordneten Rahmen statt einen neuen zu erstellen. Und daher kann jede Funktion oder Modell definiert in der Richtlinie zugänglich sein wird, in den übergeordneten Bereich. Check-out diese.
Ich denke dein problem kann gelöst werden, wie folgt:
Dieser Ansatz könnte sein, ein Problem, in Fall, dass Sie möchten, erstellen Sie wiederverwendbare Richtlinien und Sie sind dabei auch noch Staat/Modelle in Ihrem Anwendungsbereich der Richtlinie. Da bist du aber einfach erstellen Funktionen ohne Nebenwirkungen, und Sie sollten in Ordnung sein.