我是服务,工厂等的新手;所以还有很多我不明白的事情。
我有一个ui-grid。选择行时,我想将该数据用作服务中的参数,以获取REST数据以填充另一个网格。
这是我认为它应该做的事情:
gridOne
已注册=>行选择=>将selectedRow.id
发送到Service =>服务GETs data =>数据填充网格2
这就是它实际做的事情:
服务GETs data =>错误,因为未定义
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
})
}
}
答案 0 :(得分:0)
如果您正在编写服务,则不应返回对象/函数/某些内容,您的实现函数将用作新建的构造函数并创建服务实例。
因此,如果您要使用服务,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};
})
并且在注入结束时,您不需要像使用它来加载数据一样更改代码,只需编写代码同步使用
而且,我知道,为什么你要在加载数据之前尝试选择,并且在行选择的处理程序内你想要在现在存在行的时候调用数据,如果没有加载数据,对吧?我希望您在选择grid2
行时加载另一个网格grid1
的数据,然后想要将与该行相关的相应数据加载到grid2
。
无论你有什么疑问,请随意发表评论。
祝你好运:)