2014-08-29 28 views
0

我有一個範圍的聲明....爲什麼我的範圍項目不會綁定到這個承諾?

$scope.item = animalStore.query(); 

動物商店是這樣的...

factories.factory('animalStore', [ 
    '$resource','$q', function($resource,$q) { 

     var resource = $resource("animals.json"); 
     return resource; 

    } 
]); 

它的工作原理罰款然而....

我想用我在其他應用程序中使用的「承諾模式」,以確保我的數據不會被加載兩次。然而,即使數據在'then'調用中恢復正常,我的綁定似乎也不起作用。我檢查了'數據'類型是一個承諾/數組,所以我應該能夠將我的範圍綁定到它,但不能這是爲什麼?

var globalPromise = null; 
factories.factory('animalStore', [ 
    '$resource','$q', function($resource,$q) { 

     var resource = $resource("animals.json"); 

     var retObj = new Object(); 
     retObj.query = function() { 

      if (!globalPromise) { 
       console.log('getting data'); 
       globalPromise = resource.query(function() { }).$promise; 
      } 

      globalPromise.then(function (data) { 

       return data; 
      }); 

     } 

     return retObj; 

    } 
]); 

在附註中是否有任何庫讓我在不必編寫自定義代碼的情況下執行此操作?

回答

0

在您的工廠中,您應該從您的函數query返回承諾。如下所示。

return globalPromise.then(function (data) { 
    return data; 
}); 

然後在您的控制器中,您可以將結果分配給$scope.item,如下所示。

animalStore.query().then(function (data) { 
    $scope.item = data; 
}); 

希望然後幫助。

+0

我是否必須將它包裹在醜陋的罪惡之中呢?我想寫乾淨的代碼...沒有角度用於自動執行此操作嗎? – Exitos 2014-08-29 15:18:12

+0

我相信這是我處理角度承諾的方式。除非我錯過了任何東西。這有助於獲取數據嗎? – 2014-08-30 12:26:35

+0

我想我正在尋找一個名爲'unwrapping'的角度功能,他們在1.2版本中禁用了這個功能。無論如何,這非常感謝。 – Exitos 2014-08-31 10:08:05

相關問題