Angularjs:Promise不会更新Binding

时间:2014-10-02 08:23:27

标签: angularjs angular-promise

我正在使用一个承诺。但是当我的promise解析时,对视图的绑定不会绑定到新值。

我做了一个小jsfiddle:http://jsfiddle.net/58q8khap/8/

以下是观点:

<div ng-controller="MyCtrl">
  Hello, {{name}}!
</div>

和代码:

var myApp = angular.module('myApp',[]);

function MyCtrl($scope,ownservice) {
    $scope.name = "Noname";
    ownservice.getname().then(function(result){
        $scope.name = 'Superhero';
    });
}

myApp.service('ownservice', function ($q) {
    this.getname = function () {
        var deferred = $q.defer();
        setTimeout(function() {
                deferred.resolve('Superhero');
        } , 1000);
        return deferred.promise;
        }
});

2 个答案:

答案 0 :(得分:2)

只需将角度版本setTimeout替换为$timeout即可。这样,角度将强制消化周期并刷新范围

工作小提琴:http://jsfiddle.net/cunuj46w/

请注意,您应该使用角度驱动的全局变量版本,例如$ timeout或$ window也用于测试/模拟目的

答案 1 :(得分:1)

这一行之后

 $scope.name = 'Superhero';

添加

$scope.$apply();