我发现范围相当奇怪的行为:指令内容的真实类型:
<body ng-init="x=10"> <mydir> {{x}} </mydir> </body>
所以{{x}}是内容,指令定义是:
.directive('mydir',function() { return { scope: {},link: function(scope){ scope.x = 5; } }; });
当我们将scope定义为isolation(scope:{})时,它将{{x}}输出为10,因此使用外部作用域。但是当我们为该指令(scope:true)创建新的范围时,它将使用它作为内容和输出5.因此,内部内容使用不同的范围2种情况。有人可以给我一个提示/链接来代码/手册解释这个不一致吗?
UPD:我明白什么是JavaScript原型继承。我知道指令范围类型之间的区别。而我的目的不是显示5而不是10。问题是关于内部模板,在这两种情况下都应该使用父范围进行内插,该范围不能访问child / isolated的属性。
在您的原始代码段中,{{x}}不属于< mydir>。您应该为该指令定义一个模板。
// js .directive('mydir',function() { return { template: '{{x}}',scope: {},link: function(scope){ scope.x = 5; } }; }); // html <body ng-init="x=10"> <mydir></mydir> </body>