在 $stateChangeStart 上将 resolve 注入到 toParams
inject resolve into toParams on $stateChangeStart
我有一个配置文件,其中包含如下所示的状态:
$stateProvider.state('home', {
url: '?data',
abstract: true,
resolve: {
data: ['MyModel', '$stateParams', function (MyModel, $stateParams) {
return MyModel.getData($stateParams);
}]
}
});
然后是一个如下所示的模块文件:
App.module.run(['$rootScope', '$state', function ($rootScope, $state) {
$rootScope.$on('$stateChangeStart', function (event, toState, toParams) {
其中 toParams
会 return object{data:undefined}
。我知道解决方案有效并且应该有数据。如何正确地将解析从我的状态传递到 $stateChangeStart
然后访问它?
我已经尝试将我的数据解析手动注入到我的模块文件中,但它 return 未定义。我已尝试设置 params
属性以查看是否可行:
resolve: {
data: ['MyModel', '$stateParams', function (MyModel, $stateParams) {
return MyModel.getData($stateParams);
}]
},
params: {
'foo':'bar', // this would be available in toParams
'data': //can i put my data here?
}
您应该能够简单地将 MyModel
注入到您的 运行 函数中,并像在解析过程中读取它一样读取它。示例 运行 函数 (假设您的 getData
函数 returns 是一个承诺):
App.module.run(function($rootScope, MyModel) {
$rootScope.$on('$stateChangeStart', function (event, toState, toParams) {
// get the same data your resolve is using (you can also pass in toParams or the like)
MyModel.getData(toParams).then(function(data){
// do something with your data here inside $stateChangeStart
});
});
});
这就是注入的伟大之处,您只需在需要时注入即可。
我有一个配置文件,其中包含如下所示的状态:
$stateProvider.state('home', {
url: '?data',
abstract: true,
resolve: {
data: ['MyModel', '$stateParams', function (MyModel, $stateParams) {
return MyModel.getData($stateParams);
}]
}
});
然后是一个如下所示的模块文件:
App.module.run(['$rootScope', '$state', function ($rootScope, $state) {
$rootScope.$on('$stateChangeStart', function (event, toState, toParams) {
其中 toParams
会 return object{data:undefined}
。我知道解决方案有效并且应该有数据。如何正确地将解析从我的状态传递到 $stateChangeStart
然后访问它?
我已经尝试将我的数据解析手动注入到我的模块文件中,但它 return 未定义。我已尝试设置 params
属性以查看是否可行:
resolve: {
data: ['MyModel', '$stateParams', function (MyModel, $stateParams) {
return MyModel.getData($stateParams);
}]
},
params: {
'foo':'bar', // this would be available in toParams
'data': //can i put my data here?
}
您应该能够简单地将 MyModel
注入到您的 运行 函数中,并像在解析过程中读取它一样读取它。示例 运行 函数 (假设您的 getData
函数 returns 是一个承诺):
App.module.run(function($rootScope, MyModel) {
$rootScope.$on('$stateChangeStart', function (event, toState, toParams) {
// get the same data your resolve is using (you can also pass in toParams or the like)
MyModel.getData(toParams).then(function(data){
// do something with your data here inside $stateChangeStart
});
});
});
这就是注入的伟大之处,您只需在需要时注入即可。