2014-08-29 5 views
0

Я просмотрел ряд статей StackOverflow, чтобы выяснить, почему мои часы $ watch не работают, и большинство из них ссылаются на то, что либо люди не обновляют объекты, либо третий параметр, оператор Object Equality не установлен верно, как указано в этих статьях здесь:

$watch not firing on data change

$watch is not working when model is updated in scope.$apply in directive

Вот мой код:

контроллер:

$scope.selectionPending = []; 

// helper method to get selected friends 
$scope.selectedFriends = function() { 
    return filterFilter($scope.currentUser.friends, { requested: true }); 
}; 

// watch friends for changes 
$scope.$watch('currentUser.friends|filter:{requested:false}', function (nv, ov) { 
    console.log("Nv: ", nv); 
    if(nv){ 
    console.log("$scope.selectPending: ", $scope.selectionPending); 
    $scope.selectionPending = nv.map(function (friend) { 
     return friend; 
      //This is just an example of what my friend object may look like: 
      /* Example Friend Object just to show what is inside this object 
      { 
      'requested': false, 
      'pending': true, 
      'username': "Test" 
       }; */ 
    }); 
    } 
}, true); 

$scope.addPendingFriend = function(){ 
    console.log("SelectionPending: ", $scope.selectionPending); 
    //Problem: Nothing is printing out: my selectionPending array is empty. 
    ... 
} 

HTML файл:

<label ng-repeat="friend in currentUser.friends" ng-if="friend.pending == true"> 
    <input 
     type="checkbox" 
     name="selectedFriends[]" 
     value="{{friend.requested}}" 
     ng-model="friend.requested" 
    > {{friend.username}} 
    </label> 
    <div> 
     <button type = "button" class="btn btn-primary" ng-click="addPendingFriend()" ng-class="{'btn-default': friend.friendsToAdd, 'disabled': !friend.friendsToAdd}"> 
     {{friend.friendAddText}} 
     </button> 
    </div> 

В принципе у меня есть некоторые флажки внутри моего пользовательского интерфейса, который я показываю с ng-repeat и при выборе флажка, я храню в этом объекте в $scope.selectPending массив. Это хорошо работает, но когда я пытаюсь получить доступ к любым переменным, используя мою функцию $scope.addPendingFriend(), мой массив $scope.selectPending пуст. Я попытался добавить в функцию $scope.$apply сразу после оператора return friend, но у меня возникла проблема с тем, что digest cycle все еще продолжается. Я добавил в третьем параметре, насколько мне известно, должен выполнить копию из моего массива currentUser.friends в мой массив selectionPending. Я не совсем уверен, почему, может ли кто-нибудь помочь мне? Благодаря!

ответ

1

Попробуйте использовать $ watchCollection вместо $ watch, надеюсь, что он должен работать

+0

Привет, Кодер Джон, это не сработало. Любые другие советы? – user1567909

+0

Удалили ли вы третий параметр true при использовании $ watchCollection? –

+0

Да, но я все же получаю ту же проблему. – user1567909

Смежные вопросы