在ui-router状态下加载共享模型

时间:2016-03-24 10:46:38

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

shared model更改之前加载state是否有更好的方法?

....
....
.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,以便在填充controllers/directives之前不会执行StudentModel。但是在这里,为了加载StudentModel,我在resolved object (student in this case)中创建state,我不会在其他地方使用。{1}}。

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

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

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

2 个答案:

答案 0 :(得分:1)

因此您没有正确实现承诺功能。它应该返回承诺等待视图呈现。

<强>代码

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

除此之外,您能否详细说明以下问题?

  

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

答案 1 :(得分:0)

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

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

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

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