我正在尝试使用Loopback和AngularJS SDK从客户端访问数据(我认为我的问题更多是与我目前的Angular技能无关)。我正在尝试通过AngularJS控制器传递,该控制器调用服务,如下所示。这确实有效,并且数据在{{theSuppliers}}的网页上显示,但是当我查看控制台时,会看到以下结果。
scope.theSuppliers [$ promise:{…},$ resolved:false]
工厂内的行数据:(3)[Resource,Resource,Resource,$ promise:{…},$解决: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);
...
答案 0 :(得分:1)
您必须等待诺言得以解决。
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);
});
并且您必须使用promise来解决服务中的结果:
.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;
});