2014-11-02 59 views
-1

我试图使用服务进行基本数据拉取,并在有数据时将其打印在屏幕上,但某些操作不起作用。

我的服务:

mymodule.factory('MyService', function($http, $q) { 
    var service = { 
     getData: function() { 
      var dfd = $q.defer(); 
      $http.get(apiServerPath).success(function (data) { 
       dfd.resolve(data); 
      }); 
      return dfd.promise; 
     } 
    } 

    return service 
} 

我的控制器:

mymodule.controller('myCtrl', ['$scope', 'MyService', function($scope, MyService) { 
    $scope.myvar = MyService.getData(); 
} 

HTML

<div> {{myvar}} </div> 

我可以从浏览器控制台中看到 -

  1. 的MYVAR对象转成一个承诺对象
  2. 成功函数被调用和“数据”中有有效的数据
  3. 而对于我的问题和问题 - 当延迟对象解决控制器的变量不发生变化 - 为什么?
+1

您不能在视图内使用promise。 {{myVar}}应引用承诺的结果,而不是承诺本身。 – 2014-11-02 15:39:21

+0

请参阅http://stackoverflow.com/questions/23803743/what-is-the-deferred-anti-pattern-and-how-do-i-avoid-it – 2014-11-02 15:57:15

回答

5

承诺从Angular 1.2不再自动解包。在您的控制器中执行以下操作:

mymodule.controller('myCtrl', ['$scope', 'MyService', function($scope, MyService) { 
    MyService.getData().then(function success(data) { 
     $scope.myvar = data; 
    }); 
}