【问题标题】:Deep watch on array not working in AngularJS data binding深入观察数组在 AngularJS 数据绑定中不起作用
【发布时间】:2016-08-10 00:50:26
【问题描述】:

我正在使用来自 AngularStrap 的 popover 指令。我有一组呈现为切换的对象。当点击切换时,范围上的数据没有改变......我已经尝试了很多不同的方法。

这是弹出框的控制器

app.controller('CurvesPopoverCtrl', ['$scope', '$filter', 'AppData',
    function($scope, $filter, AppData) {
        'use strict';

        $scope.popoverCurrencies = AppData.getCurrencies();
        $scope.$watch ('popoverCurrencies', function(val) {
            if(val !== null && val !== undefined){ // only fires when popover opens.
                console.log("toggled", val);
                //AppData.setCurrencies($scope.currencies);
            }
        }, true); // deep watch


    }
]);

这是弹出框的模板

<div class="well curves-popover" ng-controller="CurvesPopoverCtrl">
  <div class="row">
    <div ng-repeat="currency in popoverCurrencies">
      <div class="clearfix" ng-if="$index % 3 == 0"></div>
      <div class="col-md-4">
        <div class="togglebutton">
          <label>
            <span ng-class="currency.iconClass"></span> <span>{{currency.ccy}}</span>
            <input type="checkbox" checked="currency.build">
          </label>
        </div>
      </div>
    </div>
  </div>
</div>

【问题讨论】:

    标签: angularjs data-binding popover angular-strap


    【解决方案1】:

    当您在使用 ng-repeat 的同时尝试观看收藏时,它会变得有点复杂。根据docs

    每个模板实例都有自己的作用域...

    因此,当这些其他范围内的值更新时,不会通知手表。一种解决方法是将单独的控制器绑定到 ng-repeat 的每个迭代,如 here 所示。但另一种可能更简洁的方法是利用ng-change 指令来拦截这些值的更新。我解释了一下here

    【讨论】:

    • 谢谢我最终做了这个跨度>
    猜你喜欢
    • 2013-01-20
    • 2015-05-29
    • 1970-01-01
    • 2014-12-16
    • 2016-01-16
    • 2014-10-21
    • 1970-01-01
    • 1970-01-01
    • 2017-07-26
    相关资源
    最近更新 更多