ui-router解决方案在首次加载时显示先前的解析结果,有时在重新加载时无法显示

时间:2015-06-01 02:44:52

标签: javascript angularjs angular-ui-router angular-promise

所以我的结构是这样的。

相关州代码:

       resolve:{
          projectPromise: ['$stateParams', 'projects', 'session', function($stateParams, projects, session){
            projects.getProject($stateParams.id).success(function(data){
              session.currentProject = data;
            });

          }]
        }

getProject:

  o.getProject = function(project_id, container){
   return $http.get('/project/' + project_id);
  };

相关控制器内部:

$scope.currentProject = session.currentProject;

在相关模板中:

{{currentProject.title}}

当我第一次导航到/ projects /:projectid时,它会显示正确项目的标题。但是,如果我返回并导航到新项目,它仍会显示第一个项目的标题。然后,当我刷新它显示正确的标题。如果我在此之后继续刷新,有时标题根本不会出现。我确定我的很多问题都源于对如何构建所有这些内容没有很好的理解,比如在什么地方调用getProject以及getProject是否应该将$ http.get请求的结果存储在传递的容器中作为参数或只是像我现在一样返回。任何建议都表示赞赏,谢谢!

1 个答案:

答案 0 :(得分:3)

您需要从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;
        });

      }]
    }