Angularjs: 在服务中存储 $resource 数据以在控制器之间共享

Angularjs: Store $resource data in service to share across controllers

小问题:是否可以将$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;
        }
    }; 

Is it possible to store the data from $resource in a service, so as to query once and use it in different controllers?

是的,但我会让它存储承诺,这样你就会得到一个一致的 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