Я просмотрел ряд статей 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
. Я не совсем уверен, почему, может ли кто-нибудь помочь мне? Благодаря!
Привет, Кодер Джон, это не сработало. Любые другие советы? – user1567909
Удалили ли вы третий параметр true при использовании $ watchCollection? –
Да, но я все же получаю ту же проблему. – user1567909