这是我的代码:
// 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插入Tag。但是一旦我将范围设置为true,控制器将仅应用于myDirective。
怎么会发生这种情况?内部指令中的控制器是否创建了一个从周围范围继承的新范围?为什么它适用于全球?
更新
这是一个非常愚蠢的问题,因为我以前总是使用隔离范围,所以忘记使用范围内的指令,阅读文档并清楚地理解。谢谢你的回答
答案 0 :(得分:5)
我猜您正在询问Angular Directives中的范围属性。另外,我认为你的意思是$ rootScope by term&#39; global&#39;。如 this guide 中所述,在指令中,scope属性的行为如下,
<强> scope.false 强>
默认选项,不为指令创建新范围 但与其父母共享范围
scope.true
创建一个新范围,但原型继承自父范围。
范围:'isolate'
创建一个不原型继承的隔离范围 父作用域,但您可以使用作用域访问父作用域。$ parent
答案 1 :(得分:3)
查看directive documentation并向下滚动一下有关scope
选项的部分。将scope设置为true会创建控制器附加到的新范围。未设置范围默认为false,这会导致指令使用父范围。这就是控制器被附加到父范围的原因。