angularjs - 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);
...
解决方案
你必须等待承诺得到解决。
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;
});
推荐阅读
- javascript - each() 总是为同一个元素触发两次
- xcode - 如何获得复制文件构建阶段以遵循 DSTROOT 构建设置?
- angular - Angular - 错误 TS2339:“AngularFireObject<{}>”类型上不存在属性“take”
- php - 从 JSON 数组中获取数据 - PHP
- arduino - Arduino + Java MQTT 图像发送,丢失字节
- azure-cosmosdb - 在多区域 Azure Cosmos DB 中更改源读取区域
- python - 为什么在 for 循环中尝试迭代列表时出现错误:“TypeError:'int' object is not iterable”?
- java - 从列表末尾删除的 Android 代码帮助
- python - int() 和 floor() 可以互换吗?
- python - 将字符串中的最后一个数字迭代一个