Angularjs:将$资源数据存储在服务中以跨控制器共享

时间:2015-12-16 01:13:03

标签: angularjs angularjs-service angularjs-ng-resource

简短问题:是否可以将$ resource中的数据存储在服务中,以便查询一次并在不同的控制器中使用它?

我尝试query().$promise.then,但资源仍然返回空引用。在服务中解析和存储$ resource数据的正确语法是什么,以便后续调用可以使用它?

factory('DataService', function($resource) {
    var resource = $resource("/api/data", {}, {
        query: { isArray: false }
    });

    var data;
    return {
        get: function (args) {
            if (!data) {
                resource.query().$promise.then(
                    function(result) {
                        data = result.message;  
                        return data;
                    }
                );  
            }
            return data;
        }
    }; 

1 个答案:

答案 0 :(得分:0)

  

是否可以将$ resource中的数据存储在服务中,以便查询一次并在不同的控制器中使用它?

是的,但是我已经存储了承诺,因此您获得了一致的API。例如

.factory('DataService', function($resource) {
    // $resource definition here

    var promise;

    return {
        get: function() {
            if (!promise) {
                promise = resource.query().$promise.then(function(result) {
                    return result.message;
                });
            }
            return promise;
        }
    };
})

然后其他一切都可以使用

DataService.get().then(function(message) {
    // do stuff with message
})

,它只会被检索一次。

您可以根据需要多次在原始承诺中创建新的承诺链(使用then),并始终使用相同的原始result.message值解析