2014-06-28 50 views
0

我有一個指令,監視傳入的屬性,但對於該屬性,可以傳遞原始字符串值或表達式。如果表達式通過,那麼我需要觀察它。但是如果傳遞一個原始字符串,那麼我真的不需要看這個屬性。我想知道是否有一個標準的方式來選擇性地觀察屬性是基於表達式是否傳遞與字符串?我可以檢查attrs中的「{{*}}」,但不知道是否完整。對於自定義指令,僅在傳遞表達式時才監視屬性。

該指令簡單地做到這一點:

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

和我-drct可以像這樣使用:

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

回答

2

可以使用$parse服務這一點。
解析的表達式有一個constant屬性(布爾值),它表示表達式是否由常量部分組成(因此它將永遠保持不變),或者它也有一些動態部分。

例如爲:

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

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

還參見本short demo

+0

看起來像這應該工作。非常感謝。 – dchhetri

相關問題