为什么自AngularJs 1.2.0以来,工厂承诺不工作?

时间:2014-01-17 18:39:53

标签: javascript angularjs

以前,我的代码在AngularJs 1.1.5版本中运行良好,但升级到1.2.x后,以下代码不起作用。 1.2.x中有什么变化吗?

以下是演示:http://plnkr.co/edit/w2O8Ci 它不能显示“世界”,但是如果你将angularjs改回1.1.5,一切都运行正常。

以下是代码:

<!DOCTYPE html>
<html ng-app="myApp">

<head>
    <!--<script src="http://code.angularjs.org/1.1.5/angular.min.js"></script>-->
    <script src="http://code.angularjs.org/1.2.9/angular.min.js"></script>
    <script>
        var app = angular.module('myApp', []);
        app.factory('NameFactory', function($http, $q) {
            return {
                getName: function() {
                    var deferred = $q.defer();
                    deferred.resolve({
                        name: "World"
                    });
                    return deferred.promise;
                }
            }
        });

        app.controller("NameCtrl", function($scope, NameFactory) {
            $scope.name = NameFactory.getName();
        });
    </script>
</head>

<body ng-controller="NameCtrl">
<h1>Hello, {{name.name}}</h1>
</body>

</html>

2 个答案:

答案 0 :(得分:3)

是的,1.2中的内容确实发生了变化,视图无法再自动展开承诺。 见Angularjs promise not binding to template in 1.2

答案 1 :(得分:2)

你正在以$resource的工作方式使用承诺......而不是承诺的工作方式。您应该在控制器中执行此操作.1.2

中的promise API已更改
  NameFactory.getName().then(function(data){
    $scope.name = data
  });