Angular 在全局服务中存储服务器数据。我如何确保它在那里
Angular storing server data in a global service. How do I ensure it is there
我的应用程序中有一个 globalDataService,它从服务器读取几个实体。
我只想读取一次数据,然后通过服务上的方法提供。这是一个简化版本
angular.module("myApp").factory("globalData", ["siteResource", globalData]);
function globalData( siteResource) {
var sites = [];
siteResource.query().$promise.then(function(data){
sites = data;
},
function(response) {
//handle bad stuff
});
var getSites = function () { return sites; }
return { getSites: getSites };
}
在我的控制器中,我只想能够做到这一点
this.sites = globalData.getSites();
并且知道数据在那里,如果不在那里,那就有问题了。我需要在我的服务中做什么才能实现这一目标,我刚刚浪费了 2 个小时尝试用 $q 做一些事情但没有任何乐趣。
globalData 服务是否在我需要时加载了数据,尤其是当应用程序首次加载时,这取决于运气....
保存诺言和return诺言。创建承诺 一次 并重用它。
angular.module("myApp").factory("globalData", ["siteResource", globalData]);
function globalData(siteResource) {
var promise;
function getSitesPromise () {
if (!promise) {
promise = siteResource.query().$promise;
promise = promise.catch( function (error) {
//handle bad stuff
});
};
return promise;
};
return { getSitesPromise: getSitesPromise };
}
你做的事情很简单。
可能向您的服务器发出 $http 请求以获取数据。但是你不想每次都在初始化时制作它们。
你可以像这样使用 $q ...
var promise1 = $http.get('/mypath1');
var promise2 = $http.get('/mypath2');
var promises = $q.all([promise1, promise2]); // resolves when all promises are resolved OR will reject when ONE promise rejects
promises.then(function(arrayContainingAllServerResponses) {
// do something
}).catch(function(error) {
// oops one of the requests failed
})
抱歉,我没有时间了解更多细节 - 这可能会让你走上正轨 - 干杯
之所以可行,是因为 $http return 是一个承诺 :)
请记住,如果您有一个承诺,那么您可以在其上调用 THEN - THEN 代码将在承诺被解决时执行(不是立即)。您甚至可以通过 return THEN 的承诺来链接 THEN。希望这一切对您有所帮助。
如果方法 return 是一个承诺,那么您可以在其 return 值上调用 THEN。请记住 $http return 是一个在您的服务器响应或请求超时时解决或拒绝的承诺!
我的应用程序中有一个 globalDataService,它从服务器读取几个实体。
我只想读取一次数据,然后通过服务上的方法提供。这是一个简化版本
angular.module("myApp").factory("globalData", ["siteResource", globalData]);
function globalData( siteResource) {
var sites = [];
siteResource.query().$promise.then(function(data){
sites = data;
},
function(response) {
//handle bad stuff
});
var getSites = function () { return sites; }
return { getSites: getSites };
}
在我的控制器中,我只想能够做到这一点
this.sites = globalData.getSites();
并且知道数据在那里,如果不在那里,那就有问题了。我需要在我的服务中做什么才能实现这一目标,我刚刚浪费了 2 个小时尝试用 $q 做一些事情但没有任何乐趣。
globalData 服务是否在我需要时加载了数据,尤其是当应用程序首次加载时,这取决于运气....
保存诺言和return诺言。创建承诺 一次 并重用它。
angular.module("myApp").factory("globalData", ["siteResource", globalData]);
function globalData(siteResource) {
var promise;
function getSitesPromise () {
if (!promise) {
promise = siteResource.query().$promise;
promise = promise.catch( function (error) {
//handle bad stuff
});
};
return promise;
};
return { getSitesPromise: getSitesPromise };
}
你做的事情很简单。 可能向您的服务器发出 $http 请求以获取数据。但是你不想每次都在初始化时制作它们。
你可以像这样使用 $q ...
var promise1 = $http.get('/mypath1');
var promise2 = $http.get('/mypath2');
var promises = $q.all([promise1, promise2]); // resolves when all promises are resolved OR will reject when ONE promise rejects
promises.then(function(arrayContainingAllServerResponses) {
// do something
}).catch(function(error) {
// oops one of the requests failed
})
抱歉,我没有时间了解更多细节 - 这可能会让你走上正轨 - 干杯
之所以可行,是因为 $http return 是一个承诺 :)
请记住,如果您有一个承诺,那么您可以在其上调用 THEN - THEN 代码将在承诺被解决时执行(不是立即)。您甚至可以通过 return THEN 的承诺来链接 THEN。希望这一切对您有所帮助。
如果方法 return 是一个承诺,那么您可以在其 return 值上调用 THEN。请记住 $http return 是一个在您的服务器响应或请求超时时解决或拒绝的承诺!