首页 > 解决方案 > AngularJS 服务将数据传递给控制器

问题描述

我正在尝试使用 Loopback 和 AngularJS SDK 从客户端访问数据(我认为我的问题更多地与我尚未掌握的 Angular 技能有关)。我正在尝试使用调用服务的 AngularJS 控制器传递,如下所示。这确实有效,数据显示在我的网页上 {{theSuppliers}},但是当我查看控制台时,我看到了下面的结果。

scope.theSuppliers [$promise: {…}, $resolved: false]
工厂内的行数据:(3) [Resource, Resource, Resource, $promise: {…}, $resolved: true]

显然我做错了什么,最后试图在不接受数据的数据网格(ag-grid)中表示数据。我已经看了好几天了,现在转了一圈。

angular.module('supplierModule', ['lbServices', 'dataServices'])
    .controller('SupplierListController', 
    function ($scope, $log, dbService) {
        $scope.theSuppliers = dbService.getAllSuppliers();
        $log.log('$scope.theSuppliers', $scope.theSuppliers);
    });

angular.module('dataServices', ['lbServices'])
    .service('dbService', function ($log, Supplier) {
        var dbSvc = {};
        dbSvc.getAllSuppliers = function () {
            return Supplier.find(function (mysuppliers) {
                $log.log('rowdata from within the factory: ', mysuppliers);
            });
        };
        return dbSvc;
    });

顺便说一句,我尝试从调用 Supplier.find() 的函数中实例化数据网格并且它可以工作 - 如下所示。但并不理想,因为我希望能够从我的代码中的其他地方调用服务。

var rowData = Supplier.find(function (mysuppliers) {

...

var gridOptions = {
    columnDefs: columnDefs,
    rowData: rowData,
    enableSorting: true,
    enableFilter: true
};
new agGrid.Grid(eGridDiv, gridOptions);
... 

标签: angularjsloopbackjs

解决方案


你必须等待承诺得到解决。

angular.module('supplierModule', ['lbServices', 'dataServices'])
    .controller('SupplierListController', 
    function ($scope, $log, dbService) {
        dbService.getAllSuppliers()
             .then(function(suppliers) {
                $scope.theSuppliers = suppliers;
             });
        $log.log('$scope.theSuppliers', $scope.theSuppliers);
    });

而且您必须使用承诺来解决服务的结果:

 .service('dbService', function ($log, Supplier) {
        var dbSvc = {};
        dbSvc.getAllSuppliers = function () {
            return new $q(function(resolve) {
                Supplier.find(function (mysuppliers) {
                  $log.log('rowdata from within the factory: ', mysuppliers);
                  resolve(mysuppliers);
                });
            })
        };
        return dbSvc;
    });

推荐阅读