这里是我的代码: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