在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
是在任何地方使用的对象。
答案 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]);