Ich habe ein kleines Skript mit einem Countdown, erstellt durch eine directive
, die startet, wenn ein $scope
Wert innerhalb der controller
ist true
. Dies ist der html
Code:Pass scope Wert von Direktive zu Controller - AngularJS
<countdown from="3" start-if="{{startCountdown}}"></countdown>
durch den Code des directive
Gefolgt:
app.directive('countdown', function ($interval) {
return {
restrict: 'E',
template: '{{count}}',
controller: function($scope, $element, $attrs) {
$scope.count = $attrs.from;
function countdown(){
var intervalID = $interval(function() {
if ($scope.count > 0) {
$scope.count--;
} else {
$interval.cancel(intervalID);
}
}, 1000);
}
$attrs.$observe('startIf', function(value) {
if (value) {
countdown();
}
});
}
}
});
Der Countdown läuft einwandfrei funktioniert, aber innerhalb des controller
, wenn $scope.count === 0
, sollte es eine alert()
sein, aber es ist nicht Arbeiten.
Dies ist ein Plnkr mit dem vollständigen Code. Wissen Sie, wie Sie den Wert $scope.count
an die controller
übergeben und dieses Problem lösen können? Vielen Dank im Voraus für Ihre Antworten!
Es sieht aus wie Sie den übergeordneten Rahmen dieser Richtlinie verwenden, also nicht Rahmen für die Richtlinie isoliert, weil Sie keinen Raum haben: {...} in der Richtlinie Code oben. Das bedeutet, dass Sie in der Lage sein sollten, einfach einen $ scope. $ Watch ('count', ...) in den Controller zu setzen, um nach der Änderung der Scope-Variablen Ausschau zu halten. Wenn Sie einen isolierten Bereich verwenden möchten, können Sie einen Methodenbindungsbereich festlegen: {countdown: '&'} in Ihrer Anweisung. Anschließend können Sie im Controller eine Bindung für diese Methode einrichten und diese Methode anschließend von Ihrer Anweisung aufrufen. –