2014-02-09 76 views
2

我有一個指令:NG重複顯示模式,但沒有更新它

<button ng-click="update()">Update channels for {{id}}</button><br/> 
<li ng-repeat="(k,v) in entries"> 
    {{k}} is {{v}} 
    <input type="text" ng-model="v"></input> 
</li> 


controller: ($scope, $resource) -> 
    Query = $resource('/dmx/getdefs/:id') 

    Query.get {id: $scope.id}, (res) -> 
     $scope.entries = res 
     return 

它從服務器檢索數據並顯示出來。這裏沒問題。 我編輯一個值。 但是,當我點擊更新時,我可以在我的處理程序中看到$ scope.entries沒有更改。

爲什麼?

我可以解決這個問題: - 而不是服務器返回一個dictionnay {'red':200,'blue':100}而不是我返回一個數組 [{'key':'red',' val':200},{'key':blue,'val':100}]。

如果我改變了指令:

<li ng-repeat="item in entries"> 
    {{item.key}} has {{item.val}} 
    <input type="text" ng-model="item.val"></input> 
</li> 

它工作正常。但是沒有數組的方式嗎?看起來Angular能夠用ng-repeat顯示一個詞典,但是不能用這兩種方式進行數據綁定。

+0

jsfiddler請 –

回答

3

陣列方式似乎是正確的做法。見here

如果你堅持通過你的原始對象進行迭代,您可以將HTML更改爲類似:

<li ng-repeat="(k,v) in entries"> 
     {{k}} is {{v}} 
     <input type="text" ng-model="$parent.entries[k]"></input> 
    </li> 

$parent用於自ng-repeat創建重複元素的每個實例的子範圍。

1

,所以你需要做這樣的事情,以引用的條目。每個重複的元素越來越它自己的範圍對象:

<input type="text" ng-model="entries[k]"></input>