2014-09-24 63 views
0

作用域的name屬性未使用從$ timeout返回的值更新。
$ timeout返回一個由提供給它的函數返回的值解析的promise。我閱讀視圖綁定接受承諾。但它不適合我。 更新使用承諾綁定的作用域屬性

 angular.module('myApp',[]).controller('ctrl',function($scope,$timeout){ 
 

 

 
      $scope.name = $timeout(function() { 
 
       return "World"; 
 
      }, 3000); 
 
     })
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script> 
 
<body ng-app="myApp" ng-controller="ctrl"> 
 
<h1>Hello, {{name}}!</h1> 
 

 
</body>

+1

不知道你爲什麼要這樣做(可能受到$ resource實現的影響?),但是你可以嘗試一下[像這樣](http://plnkr.co/edit/jFXXFt?p=preview)。我不認爲視圖綁定接受承諾了,這是我猜想的一個很長的後面的故事。 – PSL 2014-09-24 00:57:36

+1

@PSL所以我正在閱讀一篇舊文章呢? – 2014-09-24 01:05:19

+4

猜猜是這樣的。它從1.2 rc被刪除。通常情況下,$ parse和templates將不再自動解開承諾。此功能已棄用,如果絕對需要,可以在過渡期間通過$ parseProvider.unwrapPromises(true)api重新啓用該功能。功能在rc.2中添加,如果值爲承諾(如果承諾展開已啓用 - 請參閱上一個點),則從函數展開返回值,由於打破了常用的使用模式而被還原。「 – PSL 2014-09-24 01:07:16

回答

2

您正在使用的$timeout功能是錯誤的,這樣做反而方式:

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

$timeout函數檢索一個承諾,而不是你內在功能的return價值。

3

將其更改爲

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