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

      }]
    }