我们说我的申请中有4个观点。 主页,产品,登录,上传。
目前我在登录视图中,登录后我被重定向到产品视图。 现在,对于产品视图,我有一个类似下面的指令控制器函数
function directiveController(){
var self=this;
init();
function init(){
service.getProducts(parameter1, parameter2, successCallback, error);
}
}
service.getProducts()
将调用该服务并显示产品。现在问题是假设我在上传视图或任何其他视图,我再次转向产品视图此服务正在反复调用。我不想要它,我希望在登录到应用程序后,这个服务应该只被调用一次,而不是每次都被调用。
我不想在我的应用程序中的任何位置使用$rootScope
来实现此功能。
任何帮助,想法和建议都表示赞赏。
由于
答案 0 :(得分:2)
有一种factory/service
类似activeModel
,它会保存getProducts
api调用的值,然后你可以检查activeModel是否包含某些数据,然后你就不会打电话..否则你会打电话给api。
(function () {
'use strict'
angular.module('your-module')
.factory('activeModel', activeModel);
function activeModel(){
var activeModel = {};
activeModel = {
products : {},
};
return activeModel;
}
})();
然后在你的init方法中,你可以像这样检查..
function init(){
if(!Object.keys(activeModel.products).length > 0){
//or you can check for some properties/values too here..
service.getProducts(parameter1, parameter2, successCallback, error);
}
}
另一个更简单的解决方案是通过将api调用抽象到controller
来将api调用移至factory/service
。
答案 1 :(得分:0)
您可以使用Angular缓存来存储特定时间段的数据:https://docs.angularjs.org/api/ng/service/ $ cacheFactory
通过这种方式,您可以根据自己的需要或需要缓存这些内容来实现逻辑。
var cache = $cacheFactory('service-name-cache'),
cacheKey = someSessionHash + elementKey,
data = cache.get(cacheKey;
if (!data) {
service.getProducts().success(function(result) {
data = result;
cache.put(cacheKey, data);
});