這裏是我的代碼:AngularJS指令controllerAs語法和範圍
// HTML
<body>
<h1>{{foo.name}}</h1>
<my-directive></my-directive>
</body>
//腳本
app.directive('myDirective', function() {
return {
restrict: 'E',
replace: true,
scope: true, //**********
template: '<h4>{{foo.name}}</h4>',
controllerAs: 'foo',
controller: fooCtrl,
link: function(scope) {
console.log(scope);
}
}
});
var fooCtrl = function() {
this.name = 'FOO';
}
我的問題:
如果我使用controllerAs語法並且不在myDirective中設置scope:true,控制器將會成爲全局的,所以控制器會將foo.name插入到標籤中。但是,一旦我將範圍設置爲true,控制器將僅適用於myDirective。
這怎麼可能發生?指令中的控制器是否創建了一個從周圍範圍繼承的新範圍?爲什麼它會適用於全球?
UPDATE
這是一個非常愚蠢的問題,因爲我總是使用前隔離範圍,所以忘記的範圍內指令的使用,閱讀文檔和了解清楚。謝謝你的回答
謝謝,喬恩。我一直在想,在指令的內部,控制器只會適用於它的範圍,將範圍設置爲true,只需在指令的範圍內創建一個「子」範圍。 >< – Neaped