我是服务、工厂等的新手;所以我还有很多不明白的地方。
我有一个 ui 网格。选择一行后,我想将该数据用作服务中的参数,以获取 REST 数据以填充另一个网格。
这是我认为它应该做的:
gridOne
已注册 => 已选择行 => 将selectedRow.id
发送到服务 => 服务 GETs 数据 => 数据填充网格 2
这是它的实际作用:
服务 GET 数据 => 错误,因为未定义
selectedRow.id
。
01| $scope.gridOne.onRegisterApi = function(gridApi){
02| $scope.gridOneApi = gridApi
03| $scope.gridOneApi.selection.on.rowSelectionChanged(null, function(row){
04| $scope.gridOneSelectedRow = $scope.gridOneApi.selection.getSelectedRows()[0]
05|
06| // v---Breakpoint on this line triggered before any grid is built---v
07| myService.getAllObjects($scope.gridOneSelectedRow.id).then(response => {
08| $scope.grid2.data = response
09| }
10| })
11| }
我的服务如下所示:
app.service('myService', function ($http) {
return {
get: getObjects
}
function getOjects(id) {
let url = `http://${domain}/object/${id}`
return $http.get(url).then(response => {
return response
}).catch(error => {
return error
})
}
}
为什么服务功能先于其他所有功能运行?
如果你正在编写一个服务,你不应该返回一个对象/函数/东西,你的实现函数被用作构造函数来更新和创建你的服务实例。
因此,如果您想使用服务,您的myService
示例将是
app.service('myService', function ($http) {
function getOjects(id) {
//you should properly replace your domain, may be with the same domain by default if you start from object/...
let url = `http://${domain}/object/+ id`
return $http.get(url).then(response => {
return response.data
}).catch(error => {
return error
})
}
this.getAllObjects = getOjects;
})
在工厂的情况下
app.factory('myService', function ($http) {
function getOjects(id) {
//you should properly replace your domain, may be with the same domain by default if you start from object/...
let url = `http://${domain}/object/+ id`
return $http.get(url).then(response => {
return response.data
}).catch(error => {
return error
})
}
return {getAllObjects: getOjects};
})
在注入端,您无需更改代码以使用它来加载数据的方式,只需编写代码以同步使用 而且,我想,为什么您尝试在加载数据之前进行选择,并且在行选择处理程序中,如果要在现在存在行时调用数据,如果数据未加载,对吗?我希望您在选择一行grid1
时为另一个网格grid2
加载数据,然后想要将与该行相关的相应数据加载到grid2
。
随意发表评论,无论您还有什么疑问。
祝你好运:)