AngularJS在一家工厂获得请愿书

时间:2017-05-10 19:40:52

标签: angularjs ajax get

我已经看过几篇关于此的帖子,但我不能让它们适应我想做的事情。

我向服务器发送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()接收它;

我将AttemptFactory的依赖注入添加到.controller()。

我怎样才能实现它?

如果(在线)    data = Get(from_server); 其他    data = Get(from_local_DB);

返回数据;

像这样的东西。非常感谢。

1 个答案:

答案 0 :(得分:1)

我认为你可以试着分开你的担忧。我建议创建两个工厂:一个与您的服务器交互,另一个与本地数据库交互。每个都可以有一个方法从相应的数据存储中获取数据并返回该数据的Promise。

然后在您的控制器中,您可以根据连接状态选择要呼叫的功能。函数调用将返回一个可以.then关闭的Promise,以获取视图的数据。例如:

.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;
    })

}])