2014-09-24 34 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);