首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >状态解析和控制器调用resolve的区别

状态解析和控制器调用resolve的区别
EN

Stack Overflow用户
提问于 2016-01-12 17:08:40
回答 1查看 209关注 0票数 0

我用的是赖斯特尔和angularJS。

下面是我的控制器代码。我无法在控制台上打印教师输出,也无法使用vm.teacherList

案例1:

代码语言:javascript
复制
    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时,我可以使用以下数据作为教师的响应

代码语言:javascript
复制
[{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做任何事情。

代码语言:javascript
复制
.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一样。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-01-12 19:03:51

Case1

根据文档,getList.$object返回对一个空对象的引用,在完成请求时数据将填充该引用。因此,如果您尝试立即打印数据,您只会看到那个空对象。当您在开发人员控制台中检查网络对象时,您将看到已完成的请求,这就是您看到数据的原因。

案例2

由于您处于“解析”块中,状态在所有请求完成之前不会更改。所以你从雷桑格打来的电话必须在下一步之前打完。当您的控制器加载时,教师是一个完全填充的对象,您可以按照预期使用这些数据。

使案例1类似于案例2

使用Restangular.all().getList返回的承诺并在成功时填充数据。

代码语言:javascript
复制
 vm.teacherList = {};
 Restangular.all('teacher').getList().then(function success(data) {
   vm.teacherList = data;
   console.log(vm.teacherList);
 });
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34749740

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档