2014-01-05 3 views
1

Читая эту прекрасную книгу (Mastering Web Development in AngularJS), я наткнулся на этот код:

var Restaurant = function ($q, $rootScope) { 

var currentOrder; 

this.takeOrder = function (orderedItems) { 
    currentOrder = { 
    deferred:$q.defer(), 
    items:orderedItems 
}; 
    return currentOrder.deferred.promise; 
}; 
this.deliverOrder = function() { 
    currentOrder.deferred.resolve(currentOrder.items); 
    $rootScope.$digest(); 
}; 
this.problemWithOrder = function(reason) { 
    currentOrder.deferred.reject(reason); 
    $rootScope.$digest(); 
}; 

Я понимаю, что $rootScope.$digest(); вызовы сделаны для того, чтобы предупредить Угловое, что состояние по Promise «s был обновлен.

Правильно ли я понимаю? Кроме того, необходимо ли совершать вышеуказанные звонки $rootScope.$digest();?

+1

Какая версия AngularJS была написана против? Я никогда не использовал '$ rootScope. $ Digest();', но я начал с AngularJS версии 1.0.x. Как правило, вам нужно использовать '$ scope. $ Apply()' при уведомлении AngularJS о модификации данных за пределами среды AngularJS (например: событие jQuery). Если действия инициируются стандартной директивой AngularJS (например: 'ng-click'), тогда нет необходимости вызывать' $ scope. $ Apply() '. – rtcherry

+0

книга использует '1.0.2' в соответствии с образцом кода' index.html'

. –

ответ

1

$ scope. $ Digest() - это то, что обрабатывает все события $ watch, которые находятся в текущей и детской области. Он по существу вручную сообщает области проверки, изменилась ли переменная области видимости. Обычно вы не хотите использовать это, когда находитесь внутри контроллера или директивы, потому что функция $ scope. $ Apply() все равно вызывает $ digest и вызывается, когда вы мутируете переменную области видимости.

Оформить заказ link для примера.

0

Вам не нужно $rootScope.$digest здесь .because разрешения/отказа обещание будет срабатывать в $rootScope.$digest internelly как $intervel, $timeout, $http (после того, как запрос закончен) делает это для вас. И этот $ digest может выпустить ошибки $ digest, которые уже выполняются.

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