AngularJS服务将数据传递给控制器



我正试图使用Loopback和AngularJS SDK从客户端访问数据(我认为我的问题更多地与我的Angular技能有关,目前还不太好(。我正试图用AngularJS控制器通过,该控制器调用如下所示的服务。这确实有效,数据显示在我的{{供应商}}网页上,但当我查看控制台时,我会看到下面的结果。

范围供应商[$promise:{…},$resold:false]
工厂内的行数据:(3([Resource,Resource,Resource,$promise:{…},$reseld:true]

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

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);
... 

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

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;
});

最新更新