正在加载ui路由器状态下的共享模型

Loading shared model in ui-router states

本文关键字:共享 模型 状态 路由器 加载 ui      更新时间:2023-09-26

state更改之前,有更好的方法加载shared model吗?

....
....
.state('state1',{
      ...
      resolve : {
           student : function($stateParams,StudentModel,StudentService){
                  return StudentService.getStudentById($stateParams.studentId).then(
                       function(response){
                            return StudentModel.loadStudent(response.data);
                       }
                  );
           }
      }
}).....
.....
...

在我当前的应用程序中,我使用resolve属性加载所有的shared data models,这样在填充StudentModel之前就不会执行controllers/directives。但在这里,为了加载StudentModel,我在state中创建了一个resolved object (student in this case),我不会在其他地方使用它。

在为特定的state加载其他controllers/directives之前,有没有更好的方法来加载我的shared models

[注意:我使用的是angular 1.4.2版本]

更新:很抱歉,我在上面的代码中错过了return语句,这造成了一些混乱。我的问题不是要让上面的代码工作。对于同样的行为,有什么替代方法吗?因为在这个设计中,我必须创建一个解析对象(student),它不会在任何地方使用,而StudentModel是在任何地方都使用的对象

因此,您没有正确实现promise函数。它应该返回等待视图渲染的承诺。

代码

student: function($stateParams, StudentModel, StudentService) {
  return StudentService.getStudentById($stateParams.studentId).then(
    function(response) {
      return StudentModel.loadStudent(response.data);
    }
  );
}

除此之外,你们能详细说明问题的下一行吗?

在为特定状态加载其他控制器/指令之前,有没有更好的方法来加载我的共享模型

您需要在解析中返回$promise,以便在创建控制器之前加载数据。

  resolve : {
       student : function($stateParams,StudentModel,StudentService){
              StudentService.getStudentById($stateParams.studentId).$promise;                  
       }
  }

然后在你的控制器中,你需要从参数中获取学生。

var StudentController = function(student, $scope) {
     ....
}
app.controller("StudentController", ["student", "$scope", StudentController]);