Winkel: Aufruf einer Funktion mit parameter mithilfe von ng-klicken Sie in der Richtlinie Vorlage
neu eckig hier 🙂
Ich habe eine benutzerdefinierte Richtlinie, die eine ng-klicken Sie auf in es die der eine Funktion aufruft, die ich definiert habe in einem controller (nicht der Richtlinie-Controllers).
Dies ist die html-Ansicht:
<course-pass course-id="bla"/>
Dies ist die Richtlinie:
scotchApp.directive("coursePass", function($compile) {
return {
restrict: "E",
controller: 'dropdownCtrl',
replace:'true',
templateUrl: 'template/coursepass.html',
scope: {
courseId: '@courseId',
}
}
});
Dies ist coursepass.html (die Vorlage):
Wichtigste Zeile ist der li-tag
<div class="btn-group courseContainer" dropdown>
<button type="button" class="btn dropdown-toggle course passedCourse" dropdown-toggle ng-disabled="disabled" id="{{courseId}}">
some name<span class="caret"></span>
</button>
<ul class="dropdown-menu" role="menu">
<li><a ng-click="markFail({{courseId}})">mark fail</a></li>
</ul>
</div>
Ist und diese Funktion in der dropdownCtrl controller:
$scope.markFail = function(courseId) {
alert("we do nice things");
//do some stuff
}
Die Funktion macht, und so tut {{courseId}}
Aber ich bekomme diese Fehlermeldung:
Error: [$parse:syntax] http://errors.angularjs.org/1.2.25/$parse/syntax?p0=courseId&p1=is%20unexpected%2C%20expecting%20%5B%3A%5D&p2=12&p3=markFail(%7B%7BcourseId%7D%7D)&p4=courseId%7D%7D)
at Error (native)
Auf Winkel-Website sagt:
Syntax Error: Token 'courseId' is at column {2} of the expression [{3}] starting at [{4}].
Und ng-click wird nicht die Funktion auslösen.
Wenn ich das temeplte etwas zu Lesen wie:
<li><a ng-click="markFail(someString)">mark fail</a></li>
Kann ich sehen, dass der on-click funktioniert und fordert markFail-Funktion, aber der übergebene parameter ist nicht definiert.
Was mache ich falsch?
Danke!
Versuchen Sie es mit
markFail("someString")
. Beachten Sie die zusätzlichen Anführungszeichen. Sollte dies funktionieren. Wenn es das tut, markFail(courseId)
sollten auch funktionieren. Wenn das nicht, dann courseId
nicht richtig eingestellt ist, irgendwo.Alles in javascript ist ein string
'<a ng-click='markFail("classextender")'>' geklappt hat (der string gesendet wurde, in der Funktion. aber <a ng-click='markFail("{{courseId}}")'> hat nicht funktioniert, es sendet die Zeichenfolge {{courseId}} innen und nur machen, es in die DOM @itamar ja, jetzt Versand string, nur zum testen 🙂
InformationsquelleAutor Aviv | 2015-02-20
Du musst angemeldet sein, um einen Kommentar abzugeben.
Müssen Sie entfernen den
{{}}
aus Ihrer parameter -Warum also nicht diese Arbeit für
markFail(someString)
? Weil Sie nicht setzen Sie Anführungszeichen umsomeString
so Eckig war, versucht zu lösensomeString
als variable und festgestellt, dass es war nicht definiert. Wenn Sie stattdessen habenmarkFail("someString")
Sie sollten in Ordnung sein.{{}}
innen ng-click. Das ist gut zu wissen 🙂 Nach der VerwendungmarkFail(courseId)
es nur geschickt die Zeichenfolge "courseId" und dann habe ich gemerkt, dass ich nicht initiierencourseId
im inneren Bereich der Steuerung. nur in der Richtlinie. Denn meine Idee war es zuerst, um die id aus dem html-tag<course-pass course-id="bla"/>
und übergeben es an die Vorlage. Die Sache ist die, das Rendern geklappt, außerhalb der ng-klicken Sie, zum Beispiel, in der Vorlage, an<button>
{{courseId}}
gerendert in "bla" einfach nur gut. Ich denke, dass die rendering-innen ng-click ist difInformationsquelleAutor David Grinberg