终端:真实和优先级> 100个原因" @"停止工作的参数

时间:2015-04-04 03:01:43

标签: angularjs angularjs-directive

下面的代码"打破"插值范围值p1: "@"。我做错了什么或者这是一个Angular bug?

.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

1 个答案:

答案 0 :(得分:2)

问题在于您在指令上设置的优先级。

通常,只有在一个元素上有多个指令时,优先级才有意义。优先级确定将应用/启动这些指令的顺序。在大多数情况下,您不需要优先级,但有时当您使用编译功能时,您需要确保首先运行编译功能。

现在问题在于你已经设定了你的优先级 指令为200. {{}}插值的优先级在哪里 100。

因此,在您的情况下,即使在插值之前,指令也会编译,因此您的p1属性的值为{{something}}。

  

保持指令的优先级低于100和事物   将按预期工作。