对于custom指令,仅在传递表达式时才监视属性。

时间:2014-06-28 23:58:19

标签: angularjs angular-directive

我有一个监视传入属性的指令,但是对于该属性,可以传递原始字符串值或表达式。如果表达式被传递,那么我需要观察它。但是如果传递了一个原始字符串,那么我真的不需要查看该属性。我想知道是否有一种标准的方法来根据表达式是否传递而不是字符串来选择性地观察属性?我可以在attrs中查看“{{*}}”,但不确定是否完整。

该指令只是这样做:

//my-drct.js
 scope.watch( function(){attrs.specialProperty;} , function(value){ 
   controller.update(value); 
 })

和my-drct可以像这样使用:

<div my-drct = '{{foo}}'> //need to watch
//or
<div my-drct = 'foo' >  //dont need to watch

1 个答案:

答案 0 :(得分:2)

您可以使用 $parse 服务。
解析后的表达式有一个constant属性(布尔值),它表示表达式是否由常量部分组成(因此它将永远保持不变)或者它是否还有一些动态部分。

E.g:

.directive('myDrct', function ($parse) {
    return {
        ...
        link: function myDrctPostLink(scope, elem, attrs) {
            var isConstant = $parse(attrs.myDrct).constant;

            if (isConstant) {
                ...
            } else {
                ...
            }
        }
    };
});

另请参阅此 short demo