ANGULAR:在将角度版本升级到1.2.3后,无法使用@在指令范围内传递包含{{}}的字符串

时间:2013-12-07 01:26:14

标签: angularjs angularjs-directive

我正在使用@将"/foo/bar/{{value}}"作为字符串传递给指令,因此我可以使用interpolate方法为下拉列表构建href。我认为angular在编译时会寻找值而不是将整个事物作为字符串传递。这在角度v1.2.0中工作正常。

指令代码就像,

return {
templateUrl: '/views/directives/directive-name.html',
restrict: 'E',
replace: true,
scope: {
  title: '@',
  optHref: '@'
},
link:  link: function postLink(scope, element, attrs) {
  var hrefFormatter;


  hrefFormatter = $interpolate(attrs.optHref);

  scope.getHref = function(value, label) {
    return hrefFormatter({ value: value, label: label });
  }; 
}

调用类似,

<directive-name title ="name" opt-href="/foo/bar/{{value}}" < </directive-name>

感谢关于角度可能发生变化的任何指针,以引起这个或其他指针。

2 个答案:

答案 0 :(得分:1)

而不是:

opt-href="/foo/bar/{{value}}"

试试这个:

opt-href="'/foo/bar/{{value}}'"

请注意额外的'

答案 1 :(得分:0)

谢谢Michal!在链接之前使用控制器函数来保留范围中的attrs.optHref。像,

    controller: function ($scope, $element, $attrs) {
        $scope.optHref = $attrs.optHref;
     }

在控制器功能中,{{value}}已在范围内插入,但存在于attrs中。但是在链接中fn {{value}}也在attrs中进行了插值 - 因此将其保留在范围内并在链接fn中使用scope.optHref