Вам требуется для вызова $scope.$apply()
, когда действие / событие, изменившее переменную $scope.isUserFollowing
, вызывается / запускается методами, которые не соответствуют AngularJS.
Например, если вы сделаете что-то вроде этого:
var app = angular.module('app', [])
.controller('ctrl', function(
$scope,
$timeout
) {
$scope.firstResult = 10;
$scope.secondResult = 100;
setTimeout(function() {
$scope.firstResult = 20;
}, 2000);
$timeout(function() {
$scope.secondResult = 200;
}, 1000);
});;
angular.bootstrap(document.body, ['app']);
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.7.5/angular.min.js"></script>
<body ng-controller="ctrl">
{{firstResult}} {{secondResult}}
</body>
Вы увидите, что через 1 секунду значение $scope.secondResult
изменится, но через 2 секунды значение $scope.firstResult
не изменится. Это потому, что setTimeout не равен handled
на AngularJS, а $timeout
-. Чтобы заставить его работать, вы можете просто добавить $scope.$apply()
в setTimeout
.
. Вы всегда должны быть осторожны и пытаться использовать конструкции из angular (т.е. ng-click вместо click), потому что те действия управляются angular и включены в цикл дайджеста модели MVC, и поэтому, если Модель изменяет представление, и Контроллер обновляются соответственно.