所以我正在读一本关于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章。
答案 0 :(得分:2)
这本书真的显示了这两种模式吗?第二个将无法工作,因为每次调用它都会返回一个新的(不同的承诺),因此角度会混淆,至少在我的测试中会消化周期。
在任何一种情况下,这两种模式都不好,并且不适用于角度1.2.0及更高版本,因为模板不再自动解决承诺。
正确使用承诺的方法是:
$timeout(funciton(){
$scope.name = "World";
}, 2000);