2013-11-29 29 views
0

所以我正在閱讀一本關於AngularJS的書,並且在承諾部分中有2個代碼模式,如下所示。他們說使用第一種方法,而不是後者,但他們沒有解釋爲什麼。在這兩種情況下,都會顯示一個已解決的承諾,但我不明白爲什麼一個工作,另一個不工作。爲什麼這兩個promise中的一個不按預期更新DOM?

<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上公開承諾,並依靠解析值的自動呈現。我們發現這種方法相當混亂,尤其是考慮到函數調用返回的promise的不一致行爲。

我是新來的承諾和角度,並試圖找出如何做一些魔術。

這本書是掌握與AngularJS的Web應用程序開發,這是在第3章。

回答

2

這本書是否真的顯示這兩種模式?第二個不會工作,因爲每次調用它都會返回一個新的(不同的promise),所以角度會變得困惑,至少在我的測試中永遠消化循環。

無論哪種情況,這兩種模式都不好,不能在1.2.0及更高版本的角色下工作,因爲模板不再自動解決承諾。

使用承諾的正確的方法是真的:

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

是的,它確實表明這兩種模式。我會站點頁面#但我正在epub中閱讀它,所以「頁面」的概念取決於設備和字體大小。但是在第3章中,它們引入了$ http和$ resouce。 – boatcoder

相關問題