Javascript Angular JS使用不同的参数动态初始化服务
我有一个应用程序,当你选择一个项目时,它会进入项目部分,需要异步加载项目的所有信息和数据 我想将所有数据存储在一个单例服务中,这样我就可以访问项目所有子部分(项目页眉、项目页脚、主菜单等)中的数据 如果用户单击不同的项目,则需要使用不同的URL参数(在本例中为project_id)重新初始化Javascript Angular JS使用不同的参数动态初始化服务,javascript,jquery,angularjs,Javascript,Jquery,Angularjs,我有一个应用程序,当你选择一个项目时,它会进入项目部分,需要异步加载项目的所有信息和数据 我想将所有数据存储在一个单例服务中,这样我就可以访问项目所有子部分(项目页眉、项目页脚、主菜单等)中的数据 如果用户单击不同的项目,则需要使用不同的URL参数(在本例中为project_id)重新初始化 app.factory('ProjectService',函数($http,project\u id){ var服务={ 异步:函数(){ var promise=$http.get('someurl'+
app.factory('ProjectService',函数($http,project\u id){
var服务={
异步:函数(){
var promise=$http.get('someurl'+project_id.),然后(函数(响应){
返回响应数据;
});
回报承诺;
}
};
回程服务;
});代码>检查工作演示:
首先,使用工厂可能更适合您的情况
您需要手动处理延迟/承诺。如果已加载请求的id,请立即解析延迟对象。否则,发送一个HTTP请求(在我刚才使用的演示中)并获取项目信息
app.factory('ProjectFactory', ['$http', '$q', function ($http, $q) {
var myProject;
return {
project: function (id) {
var deferred = $q.defer();
// If the requested id is fetched already, just resolve
if (!id || (myProject && myProject.id === id)) {
console.log('get from cache');
deferred.resolve(myProject);
} else {
console.log('sending request...');
$http.get('http://jsonplaceholder.typicode.com/posts/' + id).success(function (response) {
myProject = response;
deferred.resolve(myProject);
}).error(function (response) {
deferred.reject(response);
});
}
return deferred.promise;
}
};
}]);
要使用此工厂,请执行以下操作:
app.controller('JoyCtrl', ['$scope', '$timeout', 'ProjectFactory', function ($scope, $timeout, ProjectFactory) {
ProjectFactory.project(1).then(function (project) {
$scope.project = project;
ProjectFactory.project(1).then(function (project) {
});
}, function (reason) {
console.log('Failed: ' + reason);
});
}]);
供您参考:,哇,我花了一些时间才明白发生了什么,但它成功了!非常感谢!