为什么这两个中的一个承诺不按预期更新DOM?

时间:2013-11-29 00:42:25

标签: angularjs promise

所以我正在读一本关于AngularJS的书和关于promises的部分,有两个代码模式,如下所示。他们说使用第一种方法,而不是后者,但它们无法解释原因。在这两种情况下,都会显示已解决的承诺,但我不理解为什么一个有效,另一个无法理解。

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

控制器中的代码:

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

VS

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

控制器中的以下代码:

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

此示例的提示是:

我们建议不要直接在$ scope上公开promises,并依赖于自动呈现已解析的值。我们发现这种方法相当混乱,特别是考虑到函数调用返回的promise的不一致行为。

我对promises和angular都很陌生,并试图找出一些魔法是如何完成的。

本书是使用AngularJS掌握Web应用程序开发,这是第3章。

1 个答案:

答案 0 :(得分:2)

这本书真的显示了这两种模式吗?第二个将无法工作,因为每次调用它都会返回一个新的(不同的承诺),因此角度会混淆,至少在我的测试中会消化周期。

在任何一种情况下,这两种模式都不好,并且不适用于角度1.2.0及更高版本,因为模板不再自动解决承诺。

正确使用承诺的方法是:

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