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