从状态解析和控制器调用 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);
 });