2015-02-23 96 views
-1

我不明白为什么或为什么不angularjs隔离范围使用或不$ $手表?

例如:

app.directive('fooDirective', function() { 
    return { 
     scope: { 
      readonly: '=' or '@' or '&' 
     }, 
     link: function (scope, element, attrs) { 
      // should I use $watch here or not ? 
      scope.$watch('readonly', function() { 
       // do I require to do so??? 
      }); 
     } 
    }; 
}); 
+1

这取决于你想要做什么。 – zeroflagL 2015-02-23 14:29:17

+0

重要吗?我想知道它是否为该属性颁发或不是?我的意思是,如果在范围隔离之后,我会有两块手表或一块? – IamStalker 2015-02-23 14:31:35

+0

通过使用'='激活数据绑定,而'@'是只读的,最好是字符串 – DonJuwe 2015-02-23 14:35:11

回答

0

如果你有HTML这样

<div foo-directive readonly="question.readonly"> 

将发生以下情况:scope.readonly你的指令中获得(从隔离范围之外)的question.readonly值。每当question.readonly的值改变时,scope.readonly的值相应地改变。你无事可做。

但是,如果您想在scope.readonly发生更改(如更改元素不再为只读时的颜色)时另外执行某项操作,则需要您自己的监视器(scope.$watch)。

0

隔离范围和$watch是不一样的。使用分离的范围等

scope: { 
    myAttr: '=' 
} 

告诉$compile绑定到my-attr=""属性。这意味着如果您更改指令中的值,它也会在父范围中更新。如果该值发生变化,则使用$watch触发函数。