为什么我的服务先于其他任何服务运行?



我是服务、工厂等的新手;所以我还有很多不明白的地方。

我有一个 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

随意发表评论,无论您还有什么疑问。

祝你好运:)

相关内容

  • 没有找到相关文章

最新更新