Представление AngularJS не обновляется при смене модели
97590 просмотра
4 ответа
Я пытаюсь выяснить, как работает Angular, и у меня возникают проблемы с обновлением моего взгляда при изменении модели.
HTML
<div ng-app="test">
<p ng-controller="TestCtrl">
{{testValue}}
</p>
</div>
JS
var app = angular.module('test', []);
app.controller('TestCtrl', function ($scope) {
$scope.testValue = 0;
setInterval(function() {
console.log($scope.testValue++);
}, 500);
});
есть идеи?
Автор: shunryu111 Источник Размещён: 12.11.2019 09:46Ответы (4)
117 плюса
Как упомянул Ajay beniwal, вы должны использовать Apply, чтобы начать пищеварение.
var app = angular.module('test', []);
app.controller('TestCtrl', function ($scope) {
$scope.testValue = 0;
setInterval(function() {
console.log($scope.testValue++);
$scope.$apply()
}, 500);
});
Автор: Boris Ivanov
Размещён: 19.11.2013 11:56
36 плюса
Просто используйте $ интервал
Вот ваш код изменен. http://plnkr.co/edit/m7psQ5rwx4w1yAwAFdyr?p=preview
var app = angular.module('test', []);
app.controller('TestCtrl', function ($scope, $interval) {
$scope.testValue = 0;
$interval(function() {
$scope.testValue++;
}, 500);
});
Автор: Diego Vieira
Размещён: 19.11.2013 11:41
28 плюса
setTimout
выполняет за пределами угла. Вам нужно использовать $timeout
сервис, чтобы это работало:
var app = angular.module('test', []);
app.controller('TestCtrl', function ($scope, $timeout) {
$scope.testValue = 0;
$timeout(function() {
console.log($scope.testValue++);
}, 500);
});
Причина в том, что двусторонняя привязка в angular использует грязную проверку. Это хорошая статья о грязной проверке angular. $scope.$apply()
стартует $digest
цикл. Это будет применять связывание. $timeout
обрабатывает $apply
для вас, поэтому это рекомендуемый сервис для использования при тайм-аутах.
По сути, связывание происходит во время $digest
цикла (если значение считается другим).
8 плюса
Не используйте $scope.$apply()
Angular уже использует его, и это может привести к этой ошибке
$ rootScope: действие inprog уже выполняется
если вы используете дважды, используйте $timeout
или интервал
Вопросы из категории :
- javascript Как определить, какой из указанных шрифтов был использован на веб-странице?
- javascript Валидация клиентской стороны ASP.Net
- javascript Длина объекта JavaScript
- javascript Получение текста из выпадающего списка
- javascript Скрипт входа со скрытыми кнопками
- javascript Как автоматически изменить размер текстовой области с помощью Prototype?
- javascript Удаление элементов с помощью Array.map в JavaScript
- javascript Прокрутка переполненных DIV с помощью JavaScript
- javascript API Карт Google - проблемы с классом GLatLngBounds
- javascript Проверка десятичных чисел в JavaScript - IsNumeric ()
- angularjs AngularJS с Django - конфликтующие шаблоны тегов
- angularjs Can one AngularJS controller call another?
- angularjs Вставьте HTML в представление
- angularjs Как работает привязка данных в AngularJS?
- angularjs Могу ли я использовать другой префикс вместо `ng` с angularjs?
- angularjs Не удается добраться до $ rootScope
- angularjs Отслеживание просмотров страниц Google Analytics с помощью AngularJS
- angularjs Как сделать пейджинг в AngularJS?
- angularjs Where to put model data and behaviour? [tl; dr; Use Services]
- angularjs Скрытые поля в AngularJs