2014-03-18 65 views
0

我有一個角度指令,應該顯示一些數據結構。數據結構本身應該使用選擇框來選擇。

<div>There are {{blocks.length}} blocks in this blocks set</div> 
<select ng-model="block" ng-options="b.name for b in blocks"></select><br> 
<myblock block="block"></myblock> 

現在當選擇不同的塊時使用選擇myblock指令不會自動更新以反映更改。

我認爲這是因爲我必須在指令的(隔離)範圍內觀察塊參數 (它被定義爲「塊」:「=」)。

哪裏(在代碼中)將是設置此手錶的適當位置? 這是否有任何常見的模式?

有沒有辦法告訴「myblock」只是「刷新」自己?

+0

是$ scope.block對象或原始?你的手錶應該工作,如果它是原始的 – koolunix

+1

我看到塊是一個對象,你用深表? $ scope。$ watch('block',function(){...},true); – koolunix

+0

你可以把它放在你的指令的'link'或'controller'部分 –

回答

0

從上面我的意見,你的手錶應該工作,如果添加真正作爲最後一個參數:

<div ng-app="pageModule" 
     ng-controller="parentCtrl"> 
     <div>There are {{blocks.length}} blocks in this blocks set</div> 
     <select ng-model="block" ng-options="b.name for b in blocks"></select><br> 
     <div myblock block="block"></div> 
    </div> 

    <!-- 3rd Party --> 

    <script> 

var pageModule = angular.module('pageModule',[]) 
.controller('parentCtrl',function($scope) { 
    $scope.blocks = [ 
     { name : 'green' }, 
     { name : 'blue' }, 
     { name : 'red' } 
    ]; 
}) 
.directive('myblock',function() { 
    return { 
     scope : { block : '=' }, 
     link : function($scope,$element,$attrs) { 
      $scope.$watch('block',function(s) { 
       if(s) { 
        console.log('block: ' + s.name); 
       } 
      },true); 
     } 
    } 
}); 
+0

很可能我錯過了深度監視標誌...... 當你這樣工作時 - 你會在哪裏放置實際的鏈接邏輯?考慮到這個事實,當塊更改時,我真的想根據更新的對象「重新鏈接」dom? – epeleg

+0

這將更新爲正確的值,沒有任何更改:'

{{block.name}}
'。你在問什麼? – koolunix

+0

no ..在我的指令中,我正在對塊中的信息進行一些預處理。我以爲我會在鏈接功能中這樣做,但實際上我需要在塊更改時重新執行此操作,並且從監聽偵聽器中我不能調用鏈接功能,因爲它會再次綁定手錶...... :( – epeleg

相關問題