如何从Angular中的指令检索属性的未评估值?

时间:2014-08-15 13:37:48

标签: angularjs angularjs-directive

我有一个指令,当其中一个属性的值发生变化时,使用$ observe来观察。当触发时,我需要能够检索属性的未评估的值而不是评估值。

所以我的HTML看起来像这样:

<div my-attrib="{{scopeVar}}"></div>

然后我的指令中的链接功能:

attrib.$observe('myAttrib', function(val) {
    // Both val and attrib.myAttrib contain "ABC"
    // I would like the uncompiled value instead
    var evaluatedValue = attrib.myAttrib;
});

如果控制器已经这样做了:

$ scope.myAttrib =“ABC”;

当$ observe首先,evaluatetedValue返回“ABC”。我实际上需要它返回“{{scopeVar}}”。

编辑:根据以下来自FrançoisWahl的评论,我最终将其移动到ng-repeat元素中,该元素绑定到一个项目的数组。然后我只是删除/添加更新$ scope的控制器中的新项目。这消除了检索未编译属性值的需要,并且实际上清理了很多东西。在查看视图时,这绝对是奇怪的,因为它不能立即清楚为什么它在转发器中,但它是值得的,因为它清理了相当多的代码。

1 个答案:

答案 0 :(得分:4)

你必须在指令链接的compile:函数中抓住它:

.directive('myAttrib', function() {
  return {
    compile: function(tElement, tAttrs) {
      var unevaluatedValue = tAttrs.myAttrib;

      return function postLink(scope, element, attrs) {
        attrs.$observe('myAttrib', function(val) {
          // Both val and attrib.myAttrib contain "ABC"
          // I would like the uncompiled value instead
          var evaluatedValue = attrs.myAttrib;

          console.log(unevaluatedValue);
          console.log(evaluatedValue);
        });
      }
    }
  }
})

示例Plunker: http://plnkr.co/edit/bHDmxJvnENqz8Mpg1qpd?p=preview

希望这有帮助。