从状态解析和控制器调用 Restangular 的区别
Difference of calling Restangular from state resolve and from controller
我正在使用 Restangular 和 angularJS。
下面是我的控制器代码。
我无法在控制台上打印教师输出,也无法玩 vm.teacherList
。
案例 1:
angular.module("subjectManagement").controller('subjectTeacherAllocationCtrl',
function ($scope, $state, $location, Restangular) {
var vm = this;
vm.teacherList = Restangular.all("teacher").getList().$object;
console.log( " vm.teacherList ---> " + vm.teacherList);
});
console output is only `vm.teacherList --->`
当我检查 Network XHR 时,我可以用
之类的数据来回应老师
[{teacherId: "3", empId: "9", teacherDateOfJoining: "2015-11-02", teacherJoiningGrade: "TGT",…},…]
0: {teacherId: "3", empId: "9", teacherDateOfJoining: "2015-11-02", teacherJoiningGrade: "TGT",…}
1: {teacherId: "4", empId: "10", teacherDateOfJoining: "2015-11-02", teacherJoiningGrade: "TGT",…}
案例 2:
如果我将相同的代码行放在状态解析而不是控制器中。我可以在控制台中打印 vm.teacherList
我可以用 vm.teacherList
.
做任何事情
.state('subjectTeacherAllocation', {
url: '/subject/subjectTeacherAllocation',
templateUrl: 'app/subject/edit/subjectTeacherAllocation.html',
controller: 'subjectTeacherAllocationCtrl as vm',
resolve: {
teacher: function (Restangular, $stateParams) {
return Restangular.all('teacher').getList();
}
}
})
angular.module("subjectManagement").controller('subjectTeacherAllocationCtrl',
function ($scope, $state, $location, teacher, Restangular) {
var vm = this;
$scope.teacher = {}
vm.teacherList = teacher.plain();
console.log( " vm.teacherList ---> " + vm.teacherList);
});
console output is only vm.teacherList ---> vm.teacherList ---> [object Object],[object Object],[object Object],[object Object],[object Object]
我想了解这两者之间的区别(案例 1 和案例 2)
以及如何实现,在案例 1 中打印 vm.teacherList,与案例 2
相同
案例 1
根据文档,getList.$object returns 对空对象的引用,请求完成后数据将填充该对象。因此,如果您尝试立即打印数据,您将只会看到那个空对象。当您在开发人员控制台中检查网络对象时,您会看到已完成的请求,这就是您看到数据的原因。
案例二
由于您处于解析块中,因此在所有请求完成之前状态不会改变。因此,您来自 Restangular 的呼叫必须在下一步之前完成。当您的控制器加载时,教师是一个完全填充的对象,您可以按预期使用数据。
使案例 1 像案例 2 一样工作
使用 Restangular.all().getList 返回的承诺,并在成功时填充数据。
vm.teacherList = {};
Restangular.all('teacher').getList().then(function success(data) {
vm.teacherList = data;
console.log(vm.teacherList);
});
我正在使用 Restangular 和 angularJS。
下面是我的控制器代码。
我无法在控制台上打印教师输出,也无法玩 vm.teacherList
。
案例 1:
angular.module("subjectManagement").controller('subjectTeacherAllocationCtrl',
function ($scope, $state, $location, Restangular) {
var vm = this;
vm.teacherList = Restangular.all("teacher").getList().$object;
console.log( " vm.teacherList ---> " + vm.teacherList);
});
console output is only `vm.teacherList --->`
当我检查 Network XHR 时,我可以用
之类的数据来回应老师[{teacherId: "3", empId: "9", teacherDateOfJoining: "2015-11-02", teacherJoiningGrade: "TGT",…},…]
0: {teacherId: "3", empId: "9", teacherDateOfJoining: "2015-11-02", teacherJoiningGrade: "TGT",…}
1: {teacherId: "4", empId: "10", teacherDateOfJoining: "2015-11-02", teacherJoiningGrade: "TGT",…}
案例 2:
如果我将相同的代码行放在状态解析而不是控制器中。我可以在控制台中打印 vm.teacherList
我可以用 vm.teacherList
.
.state('subjectTeacherAllocation', {
url: '/subject/subjectTeacherAllocation',
templateUrl: 'app/subject/edit/subjectTeacherAllocation.html',
controller: 'subjectTeacherAllocationCtrl as vm',
resolve: {
teacher: function (Restangular, $stateParams) {
return Restangular.all('teacher').getList();
}
}
})
angular.module("subjectManagement").controller('subjectTeacherAllocationCtrl',
function ($scope, $state, $location, teacher, Restangular) {
var vm = this;
$scope.teacher = {}
vm.teacherList = teacher.plain();
console.log( " vm.teacherList ---> " + vm.teacherList);
});
console output is only vm.teacherList ---> vm.teacherList ---> [object Object],[object Object],[object Object],[object Object],[object Object]
我想了解这两者之间的区别(案例 1 和案例 2) 以及如何实现,在案例 1 中打印 vm.teacherList,与案例 2
相同案例 1
根据文档,getList.$object returns 对空对象的引用,请求完成后数据将填充该对象。因此,如果您尝试立即打印数据,您将只会看到那个空对象。当您在开发人员控制台中检查网络对象时,您会看到已完成的请求,这就是您看到数据的原因。
案例二
由于您处于解析块中,因此在所有请求完成之前状态不会改变。因此,您来自 Restangular 的呼叫必须在下一步之前完成。当您的控制器加载时,教师是一个完全填充的对象,您可以按预期使用数据。
使案例 1 像案例 2 一样工作
使用 Restangular.all().getList 返回的承诺,并在成功时填充数据。
vm.teacherList = {};
Restangular.all('teacher').getList().then(function success(data) {
vm.teacherList = data;
console.log(vm.teacherList);
});