2

简短的问题:是否可以将 $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;
        }
    }; 
4

1 回答 1

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您可以根据需要多次从原始 Promise创建一个新的 Promise 链(使用),它总是会以相同的原始result.message值解决

于 2015-12-16T01:31:26.030 回答