<my-directive my-var="true"></my-directive>
指令:
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;
}
]);
控制檯輸出
"true"
"false"
"true"
究竟是什麼發生在這裏?該變量作爲字符串(「真」)傳遞,我正在改變它,然後它被替換了嗎?我想了解這裏的週期。這是因爲有一些額外的編譯或摘要循環踢入並重新計算所有隔離的範圍值?我認爲一旦設置,像這樣傳遞的變量(@,只是在指令中的字符串)會保持不變?
有沒有什麼辦法可以在指令內連接一段時間,在這之後字符串變量不會被替換,或者它會總是像這樣對每個摘要或什麼都起作用,而且我不得不使用$ watch?
這與相似的問題有關 - http://stackoverflow.com/questions/22967024/initializing-isolated-scope-inside-a-directive,但我沒有找到原來的答案是完整的,因爲我使用eval重新評估這些字符串爲布爾值,並不是真的想改變它們的值,而是讓它們保持布爾值。所以我將其中一個轉換爲布爾值,然後將它重寫爲字符串。 – rattkin 2014-10-31 16:29:59