【问题标题】:For custom directive, watch attribute only if expression is passed.对于自定义指令,仅在传递表达式时才监视属性。
【发布时间】:2014-06-28 23:58:19
【问题描述】:

我有一个监视传入的属性的指令,但是对于该属性,可以传递原始字符串值或表达式。如果传递了一个表达式,那么我需要观察它。但是如果传递了一个原始字符串,那么我真的不需要看这个属性。我想知道是否有一种标准方法可以根据是否传递表达式与字符串来选择性地监视属性?我可以在 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

【问题讨论】:

    标签: angularjs angular-directive


    【解决方案1】:

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

    例如:

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

    另请参阅此short demo

    【讨论】:

      猜你喜欢
      • 2015-06-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-27
      • 1970-01-01
      相关资源
      最近更新 更多