2014-11-02 94 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; 
    }); 
}