AngularJS 服务将数据传递给控制器
AngularJS service passing data to a controller
我正在尝试使用 Loopback 和 AngularJS SDK 从客户端访问数据(我认为我的问题更多地与我的 Angular 技能有关).我正在尝试使用调用服务的 AngularJS 控制器传递,如下所示。这确实有效,数据显示在我的 {{theSuppliers}} 网页上,但是当我查看控制台时,我看到下面的结果。
scope.theSuppliers [$promise: {...}, $resolved: false]
来自工厂内部的行数据:(3) [Resource, Resource, Resource, $承诺:{...},$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;
});
我正在尝试使用 Loopback 和 AngularJS SDK 从客户端访问数据(我认为我的问题更多地与我的 Angular 技能有关).我正在尝试使用调用服务的 AngularJS 控制器传递,如下所示。这确实有效,数据显示在我的 {{theSuppliers}} 网页上,但是当我查看控制台时,我看到下面的结果。
scope.theSuppliers [$promise: {...}, $resolved: false]
来自工厂内部的行数据:(3) [Resource, Resource, Resource, $承诺:{...},$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;
});