Javascript Angular JS使用不同的参数动态初始化服务

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'+

我有一个应用程序,当你选择一个项目时,它会进入项目部分,需要异步加载项目的所有信息和数据

我想将所有数据存储在一个单例服务中,这样我就可以访问项目所有子部分(项目页眉、项目页脚、主菜单等)中的数据

如果用户单击不同的项目,则需要使用不同的URL参数(在本例中为project_id)重新初始化

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);
    });
}]);

供您参考:,

哇,我花了一些时间才明白发生了什么,但它成功了!非常感谢!