2017-05-10 33 views
0

我已經看過幾篇關於這方面的文章,但我無法調整它們以適應我想要做的事情。AngularJS在工廠中獲得申請

我有一個GET請求服務器來獲得JSON響應,並像一個魅力。

.controller('ListController', ['$scope', '$http', function($scope, $http){ 

    $http.get('js/data.json').success(function(data){ 
     $scope.elements = data; 
    }); 
}]) 

現在我可以使用ng-repeat在$ scope.elements中的所有元素中打印視圖。

但現在我需要做兩個不同的GET,取決於是否有互聯網,在線檢查,如果沒有,檢查本地數據庫。

我創建了一個工廠一樣如下:

.factory('AttemptFactory', function($http){ 

var self = this; 

this.elements = []; 

this.returnFunction = function() { 

    $http.get('js/data.json').success(function(data){ 
     self.elements = data; 
    }); 
} 
} 

我首先試圖填補this.elements,然後在第一個控制器訪問它與$ scope.newList = = AttemptFactory.elements 。 也嘗試做一個返回self.elements,並與AttemptFactory = AttemptFactory.returnFunction();

我向.controller()添加了AttemptFactory的依賴注入。

我該如何實現它?

if(online) data = Get(from_server);其他 data = Get(from_local_DB);

返回數據;

就是這樣。非常感謝。

回答

1

我想你可以嘗試分離你的關注點。我建議創建兩個工廠:一個與您的服務器交互,另一個與本地數據庫交互。每個方法都可以有一個方法從相應的數據存儲中獲取數據並返回該數據的Promise。

然後在您的控制器中,您可以根據連接狀態選擇要調用的功能。函數調用都將返回一個Promise,您可以通過.then來獲取視圖的數據。例如:

.factory('ServerFactory', function($http){ 

    var serverFactory = {}; 

    serverFactory.fetchJson = function() { 
     // note that we're returning the promise that $http get returns that will resolve with our data 
     return $http.get('js/data.json').success(function(res){ 
      return res.data; 
     }); 
    } 

    return serverFactory; 
}) 
.factory('LocalDbFactory', function() { 
    var localDbFactory = {}; 

    localDbFactory.fetchJson = function() { 
     // Return promise for JSON data here 
    } 

    return localDbFactory; 

}) 
.controller('ListController', ['$scope', '$http', 'ServerFactory', 'LocalDbFactory', function($scope, ServerFactory, LocalDbFactory){ 

    var result; 
    if (/* test if online */) { 
     result = ServerFactory.fetchJson(); 
    } else { 
     result = LocalDbFactory.fetchJson(); 
    } 

    result.then(function(data) { 
     $scope.elements = data; 
    }) 

}]) 
+0

太棒了!這就是我想要做的。 我想從請願書中返回'數據',而不是全部的承諾。 我不知道如何在.success()。error()函數中做'返回'。 問題:當你寫data.then()時,你在引用先前的var結果,對吧? 爲了與返回的承諾一起工作。我會馬上測試代碼! =)謝謝! – ButterySAM777

+0

糟糕。我的意思是'result.then()'。我們只是關閉了來自服務器或本地數據庫的數據承諾。還在if語句中進行了更正。在else塊中,LocalDbFactory應該正在進行呼叫。 – Ian

+0

是的,我聚集了!哈哈謝謝你! = d – ButterySAM777