2016-01-12 2 views
0

Я использую 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 --->` 

, когда я проверяю сети 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: Если я ставлю тот же код line в состоянии разрешить вместо контроллера. Я могу печатать 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) и Как я могу достичь, печать vm.teacherList в случае 1, так же, как при 2

+0

проверить после того, как вам сообщение, но текущий ответ правильный, если вы до сих пор вопрос писать ... –

+0

@PoyrazYilmaz: Спасибо за взгляд. – fresher

ответ

1

В соответствии с документацией getList. $ Object возвращает ссылку на пустой объект, который будет заполняться данными, когда запрос будет выполнен. Поэтому, если вы попытаетесь распечатать данные сразу, вы увидите только пустой объект. Когда вы проверяете сетевой объект в консоли разработчика, вы видите заполненный запрос, поэтому вы видите данные.

Случай 2

Поскольку вы в блоке решимости, состояние не изменится, пока все запросы не будут завершены. Поэтому ваш вызов из Restangular должен завершиться до следующего шага. Когда ваш контроллер загружается, учитель является полностью заполненным объектом, и вы можете использовать данные, как ожидалось.

Создание Case 1 работа как случай 2

Используйте обещание возвращаемый Restangular.all(). GetList и успех заполнения данных.

vm.teacherList = {}; 
Restangular.all('teacher').getList().then(function success(data) { 
    vm.teacherList = data; 
    console.log(vm.teacherList); 
}); 
Смежные вопросы