我发现指令内部内容的范围:true 类型有一种奇怪的行为:
<body ng-init="x=10">
<mydir>
{{x}}
</mydir>
</body>
所以{{x}}是内部内容,指令定义是:
.directive('mydir', function() {
return {
scope: {},
link: function(scope){
scope.x = 5;
}
};
});
当我们将范围定义为隔离(范围:{} )时,它会将{{x}}输出为10,因此使用外部范围。但是当我们为指令创建新范围(范围:true )时,它将使用它作为内部内容和输出5.因此它对内部内容使用不同的范围2个案例。有人可以给我一个关于源代码/手册的提示/链接,以解释这种不一致吗?
以下plnk可以使用代码。
UPD :我明白什么是JavaScript原型继承。我知道指令范围类型之间的区别。我的目标不是显示5而不是10。问题是关于内部模板,在两种情况下都应该使用父范围进行插值,父范围无法访问子/隔离的属性。
答案 0 :(得分:5)
答案 1 :(得分:3)
A得到了角度问题的答案: https://github.com/angular/angular.js/issues/13845#issuecomment-174953398
var scopeToChild = scope;
if (newIsolateScopeDirective && (newIsolateScopeDirective.template || newIsolateScopeDirective.templateUrl === null)) {
scopeToChild = isolateScope;
}
childLinkFn && childLinkFn(scopeToChild, linkNode.childNodes, undefined, boundTranscludeFn);
<强>履历:强> 在隔离范围类型的情况下,范围仅适用于指令模板,但不适用于内部内容。
答案 2 :(得分:2)
有些不对劲的事情正在发生。如果您在启用了Batarang的Chrome中运行代码,则可以看到范围:{} 时确实创建了与第一个分开的新范围,完全断开连接,并将变量设置为5。但是您的插值字符串绑定到外部范围。如果设置范围:true ,它还会创建一个从外部继承的新范围,并且{{x}}插值正确绑定。我不认为它是指令上的scope参数不起作用,带绑定的东西不起作用。