2013-10-21 93 views
0

我有一個指令,顯示單擊行時的詳細信息屏幕。我正在嘗試更新相遇。這裏是指令:我的控制器沒有更新我的指令 - 角

angular.module('app').directive('chatContainer', function() { 
    return { 
    scope: { 
     encounter: '=', 
     count: '=' 
    }, 
    templateUrl: 'views/chat.container.html', 
    link: function(scope, elem) { 
    }; 
}); 

這裏是模板的指令:

<div class="span4 chat-container"> 
<h5 class="chat-header"> 
    <span class="container">{{encounter.patient.firstName }} {{encounter.patient.lastName}}</span> 
    </h5> 
</div> 

這裏就是指令宣佈在html:

<div chat-container encounter="selectedEncounter" count="count"></div> 

,這裏是控制器該行在被點擊時調用。

angular.module('app').controller('EncounterCtrl', function ($scope, singleEncounter) { 

    $scope.count = 500; 

    $scope.selectedIndex = -1; 

    $scope.selectedEncounter = -1; 

    $scope.getSelectedRow = function($index) { 
    $scope.selectedIndex = $index; 
    $scope.selectedEncounter = $scope.encounters[$scope.selectedIndex]; 
    }; 

    $scope.encounter = singleEncounter.selectedEncounter; 
}); 

我進入功能getSelectedRow(),它改變了selectedEncounter到正確的遭遇。綁定不會將選擇帶到我的chatContainer。我想當我在指令範圍中聲明encounter,並將其作爲範圍類型=時,它將其綁定,但我錯過了一些東西?

回答

0

您需要$apply()更改,但操作值的邏輯應該位於chatContainer指令內而不是控制器內部。

+0

同意,它應該在指令中,但$如何工作? – jhamm

+0

看一看:http://docs.angularjs.org/api/ng.$ro​​otScope.Scope#methods_$apply – gustavohenke

+0

什麼是調用函數'getSelectedRow()'?你沒有包含所有的代碼,所以我猜測有一些超出了角度框架的東西,所以'$ digest'循環沒有運行。 這篇文章解釋得非常好http://angular-tips.com/blog/2013/08/watch-how-the-apply-runs-a-digest/ – Hoolagon