【问题标题】:ng-repeat displays model but not updating itng-repeat 显示模型但不更新它
【发布时间】:2014-03-06 19:45:51
【问题描述】:

我有一个指令:

<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 没有改变。

为什么?

我能够解决这个问题: - 而不是服务器返回一个字典 {'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 显示字典,但不能同时进行数据绑定。

【问题讨论】:

    标签: angularjs binding directive


    【解决方案1】:

    每个重复的元素都有自己的范围,因此您需要执行以下操作来引用条目对象:

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

    【讨论】:

      【解决方案2】:

      数组方式似乎是正确的做法。见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 为重复元素的每个实例创建了一个子作用域。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-09-01
        • 1970-01-01
        • 1970-01-01
        • 2016-05-14
        • 1970-01-01
        • 1970-01-01
        • 2014-10-14
        相关资源
        最近更新 更多