2014-12-09 2 views
0

Я пытаюсь понять, как обрабатывается обновление вида в Angular. Когда я использую встроенную асинхронную функцию, и она обращается к обновлению переменной $ scope, представление не обновляется. Но когда я использую угловую асинхронную функцию, представление обновляется должным образом. Например:

// Example 1: This code updates the store in view 
$timeout(function() { 
    $scope.store = { 
     name: 'MyName' 
    } 
}, 2000); 

// Example 2: This code does not update the store in view 
setTimeout(function() { 
    $scope.store = { 
     name: 'MyName' 
    } 
}, 2000); 

Почему второй пример не обновляет магазин?

+2

Поскольку второй пример не имеет представления о том, что такое цикл дайджеста и не обновляет его (отсюда и причина, по которой преобразуются некоторые нативные функции). – tymeJV

+0

Возможный дубликат [Вид не обновляется в AngularJS] (http://stackoverflow.com/questions/10179488/the-view-is-not-updated-in-angularjs) – PSL

+0

Как я могу обернуть собственную асинхронную функцию в чтобы получить обновление? Я не хочу использовать $ scope.apply(). –

ответ

2

Это связано с тем, что Угловая служба $timeout знает об Угловом времени выполнения и правильно зарегистрирует изменение.

Такого же поведение может быть захвачен с ванильным JS по телефону $ применять() в объеме после внесения изменений:

setTimeout(function() { 
    $scope.store = { 
    name: 'MyName' 
    } 
    $scope.$apply(); 
}, 2000); 

Есть другие услуги, такие как $window и $interval, которые действуют как удобство обертки для регулярных JS, но они гарантируют, что любые изменения в размере $ регистрируются в цикле дайджеста правильно.

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