Похоже, что ваш getComments
работает асинхронно, поскольку вы передаете функцию обратного вызова, в которой в качестве параметра используются комментарии.
Поэтому, даже если вы обновляете свои комментарии внутри этого обратного вызова, AngularJS, похоже, не «замечает этого», верно?
Это потому, что вы должны явно указать AngularJS для запуска нового цикла дайджеста.
Короче, просто добавьте $scope.$apply()
в конец вашего обратного вызова:
getComments(20, articleID, 0, function(comments) {
for(var i = 0; i < comments.length; i++) {
$scope.addComment(comments[i]);
}
$scope.$apply();
});
Чтобы узнать больше об этом, поищите "AngularJS digest cycle". Короче говоря, дело в том, что AngularJS обновляет все в так называемых циклах дайджеста. Если цикл дайджеста не происходит, AngularJS не «заметит» изменения. Когда все работает синхронно, AngularJS автоматически запускает циклы дайджеста. Но для многих асинхронных вещей AngularJS не может понять это автоматически, поэтому вы должны явно указать AngularJS для выполнения цикла дайджеста.