2013-11-29 1 views
0

Итак, я читаю книгу на AngularJS, а в разделе о обещаниях есть два шаблона кода, как показано ниже. Говорят, что используют первый метод, а не последний, но они не могут объяснить, почему. В обоих случаях необходимо отобразить разрешенное обещание, но я не понимаю, почему он работает, а другой нет.Почему одно из этих двух обещаний не обновляет DOM, как ожидалось?

<h1>Hello, {{name}}!</h1> 

И код в контроллере:

$scope.name = $timeout(function() { 
     return "World"; 
}, 2000); 

против

<h1>Hello, {{getName()}}!</h1> 

И следующий код в контроллере:

$scope.getName = function() { 
     return $timeout(function() { 
     return "World"; 
     }, 2000); 
}; 

Совет из этого примера:

Мы советуем не публиковать обещания непосредственно в области $ scope и полагаться на автоматический рендеринг разрешенных значений. Мы считаем, что этот подход довольно запутан, особенно принимая во внимание противоречивое поведение для обещаний, полученных от вызова функции.

Я новичок как в обещаниях, так и в угловатости, и пытаюсь выяснить, как совершается какая-то магия.

Книга Освоение разработки веб-приложений с помощью AngularJS, и это в третьей главе.

ответ

2

Действительно ли книга показывает оба эти шаблона? Второй не будет работать, потому что каждый раз, когда он называется, он возвращает новое (другое обещание), поэтому угловой запутывается, и, по крайней мере, в моих тестах переваривает циклы навсегда.

В любом случае оба эти шаблона не являются хорошими и не будут работать с угловыми 1.2.0 и выше, потому что шаблоны больше не разрешают обещания автоматически.

Правильный способ использования обещаний действительно:

$timeout(funciton(){ 
    $scope.name = "World"; 
}, 2000); 
+0

Да, это действительно показывает обе модели. Я бы разместил страницу #, но я читаю ее в epub, поэтому понятие «страница» зависит от размера устройства и шрифта. Но это в главе 3, перед тем, как ввести $ http и $ resouce. – boatcoder