Usage:AngularJS sovrascrive isolato direttiva portata
<my-directive my-var="true"></my-directive>
direttiva:
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;
}
]);
uscita Console
"true"
"false"
"true"
Quello che sta accadendo proprio qui? La variabile viene passata come stringa ("true"), la sto cambiando, quindi viene sostituita di nuovo? Mi piacerebbe capire il ciclo qui. Ciò è dovuto al fatto che è necessario eseguire un ciclo di compilazione o digest aggiuntivo e ricalcolare di nuovo tutti i valori degli ambiti isolati? Ho pensato che una volta impostato, le variabili passate in questo modo (@, solo la stringa nella direttiva) rimarrebbero le stesse?
C'è un modo per collegarsi alla direttiva in un momento, dopo di che le variabili di stringa non vengono sostituite, o funzionerà sempre così con ogni digest o quant'altro, e sono obbligato a usare $ watch?
Questo è correlato a una domanda simile - http://stackoverflow.com/questions/22967024/initializing-isolated-scope-inside-a-directive, ma non trovo la risposta originale per essere completa, perché io uso eval per rivalutare queste stringhe in booleani, non voglio davvero cambiare il loro valore, ma per farli rimanere booleani. Quindi traduco uno in booleano, e poi viene cancellato nuovamente. – rattkin