2014-09-24 2 views
0

Свойство name области не обновляется значением, возвращаемым из $ timeout.
$ timeout возвращает обещание, разрешенное значением, возвращаемым из предоставленной ему функции. И я прочитал привязки вида, чтобы принять обещания. Но это не работает для меня. Обновление атрибутов области, привязанных к обещаниям

 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

+1

@PSL, поэтому я читал старую статью !? –

+4

Угадайте. Он был удален с 1,2 г. '$ parse и шаблоны вообще больше не будут автоматически разворачивать обещания. Эта функция устарела и, если она абсолютно необходима, ее можно повторно включить в переходный период через $ parseProvider.unwrapPromises (true) api. функция, добавленная в rc.2, которая разворачивает возвращаемые значения из функций, если значения являются обещаниями (если обезвреживание обещаний включено - см. предыдущую точку), было отменено из-за нарушения популярного шаблона использования. ' – PSL

ответ

2

так, что вы используете функцию $timeout неправильно, сделайте это вместо:

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

$timeout функция получает обещание, а не значение return вашей внутренней функции.

3

Изменить его

$timeout(function() { 
    $scope.name = "World"; 
}, 3000); 
Смежные вопросы