Verbrauch:AngularJS überschreibt isoliert Richtlinie Anwendungsbereich
<my-directive my-var="true"></my-directive>
Richtlinie:
app.directive('myDirective', [
function() {
var definition = {
restrict: "E",
replace: false,
transclude: false,
scope: {
myVar: '@',
},
controller: ['$scope', function($scope) {
console.log($scope.myVar); // "true"
$scope.myVar = "false";
console.log($scope.myVar); // "false"
setTimeout(function() {
console.log($scope.myVar); // "true" (!)
}, 100);
}]
};
return definition;
}
]);
Konsolenausgabe
"true"
"false"
"true"
Was genau ist hier passiert? Die Variable wird als String übergeben ("true"), ich ändere sie, dann wird sie wieder ersetzt? Ich möchte den Zyklus hier verstehen. Liegt das daran, dass ein zusätzlicher Kompilierungs- oder Digest-Zyklus auftritt und alle isolierten Bereichswerte erneut berechnet werden? Ich dachte, dass, einmal gesetzt, Variablen wie folgt (@, nur String in Direktive) bleiben die gleichen?
Gibt es eine Möglichkeit, innerhalb der Direktive zu einem Zeitpunkt zu verbinden, nach dem Zeichenfolge Variablen nicht ersetzt werden, oder wird es immer so mit jedem Digest oder whatnot arbeiten, und ich bin gezwungen, $ watch zu verwenden?
Dies ist mit ähnlichen Frage verwandt - http://stackoverflow.com/questions/22967024/initializing-isolated-scope-inside-a-directive, aber ich finde nicht die ursprüngliche Antwort zu vervollständigen, weil ich verwende eval, um diese Zeichenfolge in boolesche Werte neu zu bewerten, möchten ihren Wert nicht wirklich ändern, sondern dafür sorgen, dass sie boolesch bleiben. Also übersetze ich eins in boolean und dann wird es wieder überschrieben. – rattkin