2016-08-09 8 views
1

Я использую директиву popover от AngularStrap. У меня есть коллектив объектов, которые отображаются в виде переключателей. Когда нажимаются кнопки, данные по области не изменяются ... Я пробовал множество разных способов сделать это.Глубокие часы на массиве, не работающие в привязке данных AngularJS

Это контроллер пирог

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> 

ответ

1

Это становится немного сложнее, когда вы пытаетесь посмотреть коллекцию, используя ng- повторение. Согласно docs:

Каждый шаблон экземпляр получает свою область ...

Таким образом, часы не уведомлен, когда значения в этих других областях обновляются. Одним из способов является привязка отдельного контроллера к каждой итерации ng-repeat, как показано here. Но другой, возможно, более чистый подход - использовать директиву ng-change для перехвата обновления этих значений. Я объяснил это немного here.

+0

Спасибо, что я сделал это rex