下面的代码"打断"插值范围值p1: "@"
。我是做错了什么,还是这是一个Angular错误?
.directive("foo", function($compile){
return {
terminal: true,
priority: 200, // anything > 100
templateUrl: "foo.html",
scope: {
p1: "@", // doesn't work
p2: "=", // works
p3: "&" // works
},
link: function(scope, element){
// this also doesn't help
$compile(element.contents())(scope);
}
};
});
模板foo.html
为:
<div>{{p1}}</div>
<div>{{p2}}</div>
<foo p1="{{name}}" p2="name" ng-init="name = 'something'"></foo>
的输出为:
{{name}}
something
plunker
问题在于您在指令上设置的优先级
通常,只有在一个元素上有多个指令时,优先级才相关。优先级决定应用/启动这些指令的顺序。在大多数情况下,您不需要优先级,但有时在使用编译函数时,您需要确保编译函数首先运行
现在您的问题是您已经设置了指令为200。其中,作为{{}}插值的优先级100.
因此,在您的情况下,即使在对值进行插值之前,指令也会编译,因此p1属性的值为{{something}}。
保持你指令的优先级——任何低于100的东西将按预期进行。