2014-11-04 142 views
1

我的指令具有隔離範圍,它從封閉控制器接收對象作爲屬性。

app.directive('details', function() { 
     return { 
      restrict : 'E', 
      scope : { 
       device : '=device', 
       . 
       . 
       . 
      }, 
      templateUrl : '/details.html', 
      link : function(scope, element, attrs) { 
       attrs.$observe('device', function(value) { 
       ... 
       }); 
      } 
     }; 
    }); 

而在HTML:

<details device='ctrlAlias.device' ...> 

我讀的地方,如果我想爲您在屬性的變化,我需要使用$observe功能。但是,我看到的大多數示例僅在原始值上使用$observe

我不知道我將如何$observedevice的屬性,說attrs.$observedevice.exist(一個布爾值)和device.id(字符串)?

回答

3

您應該使用$watch

註冊了一個偵聽器回調要執行每當watchExpression變化。

然而,$observe是這樣的方法在Attributes對象

觀察內插屬性。

代碼

scope.$watch(function() { 
    return scope.device 
}, function(newValue, oldValue) {  
}, true); 

更多詳情,請訪問AngularJS : Difference between the $observe and $watch methods

+0

看到這篇文章瞭解'$ watch'和'$ observe'之間區別的更多細節。 http://stackoverflow.com/questions/14876112/difference-between-the-observe-and-watch-methods – morloch 2014-11-04 11:01:35

+0

@Satpal我編寫了'function(newValue,oldValue){if(typeof oldValue ===「undefined」)&& (newValue.exist == true){...}}'但我得到屬性未定義。 – menorah84 2014-11-04 11:21:05

+0

@ menorah84,期望值'ctrlAlias.device'是什麼? – Satpal 2014-11-04 11:30:16