ui-router 解决在第一次加载时显示以前的解决结果,有时在重新加载时根本不显示
ui-router resolve showing previous resolve result on first load, sometimes not showing at all on reloads
所以我的结构是这样的。
相关州代码:
resolve:{
projectPromise: ['$stateParams', 'projects', 'session', function($stateParams, projects, session){
projects.getProject($stateParams.id).success(function(data){
session.currentProject = data;
});
}]
}
获取项目:
o.getProject = function(project_id, container){
return $http.get('/project/' + project_id);
};
相关控制器内部:
$scope.currentProject = session.currentProject;
相关模板内部:
{{currentProject.title}}
当我第一次导航到 /projects/:projectid 时,它显示了正确项目的标题。但是,如果我返回并导航到一个新项目,它仍会显示第一个项目的标题。然后当我刷新它显示正确的标题。如果在那之后我一直刷新,有时标题根本不会出现。我确信我的很多问题源于没有很好地理解如何构建所有这些,比如调用 getProject 的确切位置以及 getProject 是否应该将 $http.get 请求的结果存储在传递的容器中作为参数或只是 return 就像我目前拥有的那样。非常感谢任何建议,谢谢!
您需要 return 来自 resolve
函数的承诺,否则 Angular 将导航到承诺解决之前的状态:
resolve:{
projectPromise: ['$stateParams', 'projects', 'session', function($stateParams, projects, session){
// Add `return` statement here:
return projects.getProject($stateParams.id).success(function(data){
session.currentProject = data;
});
}]
}
所以我的结构是这样的。
相关州代码:
resolve:{
projectPromise: ['$stateParams', 'projects', 'session', function($stateParams, projects, session){
projects.getProject($stateParams.id).success(function(data){
session.currentProject = data;
});
}]
}
获取项目:
o.getProject = function(project_id, container){
return $http.get('/project/' + project_id);
};
相关控制器内部:
$scope.currentProject = session.currentProject;
相关模板内部:
{{currentProject.title}}
当我第一次导航到 /projects/:projectid 时,它显示了正确项目的标题。但是,如果我返回并导航到一个新项目,它仍会显示第一个项目的标题。然后当我刷新它显示正确的标题。如果在那之后我一直刷新,有时标题根本不会出现。我确信我的很多问题源于没有很好地理解如何构建所有这些,比如调用 getProject 的确切位置以及 getProject 是否应该将 $http.get 请求的结果存储在传递的容器中作为参数或只是 return 就像我目前拥有的那样。非常感谢任何建议,谢谢!
您需要 return 来自 resolve
函数的承诺,否则 Angular 将导航到承诺解决之前的状态:
resolve:{
projectPromise: ['$stateParams', 'projects', 'session', function($stateParams, projects, session){
// Add `return` statement here:
return projects.getProject($stateParams.id).success(function(data){
session.currentProject = data;
});
}]
}