我有一个配置文件,其中包含如下所示的状态:
$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
将返回object{data:undefined}
。我知道解决方案有效,应该有数据。如何正确地将解决方案从我的状态传递到$stateChangeStart
然后访问它?
我尝试将我的数据解析手动注入我的模块文件,但它返回undefined。我已尝试设置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?
}
答案 0 :(得分:1)
您应该只需将MyModel
注入您的运行功能,并按照您在解决过程中阅读它的方式阅读它。示例运行函数(假设您的getData
函数返回一个承诺):
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
});
});
});
这就是使注射变得更好的原因,你只需要在使用它时注入一些东西。