我正在从UI路由器v0.4.x迁移到v1.0,但我遇到了问题。请考虑以下代码段。
myApp
.component('myComponent', {
bindings: {
resolveBinding: '<'
},
controller: class myComponentController {
constructor() {
// ...
}
},
templateUrl: someTemplateUrl
})
.config(($stateProvider) => {
$stateProvider
.state('some-state', {
url: '/some-state',
component: 'myComponent',
resolve: {
resolveBinding: function(DependencyResolver) {
let targetStateName = this.self.name
return DependencyResolver.doSomeThingsFor(targetStateName)
}
}
})
})
在新版本中let targetStateName = this.self.name
将失败,因为this
现在null
,而之前它包含有关它正在转换到的状态的信息。
如何获取此代码块中的状态名称?
我正在考虑使用$transitions.onBefore
钩子将名称放在rootScope
上,并执行以下操作:
resolveBinding: function($rootScope, DependencyResolver) {
let targetStateName = $rootScope.hackyStateName
return DependencyResolver.doSomeThingsFor(targetStateName)
}
但我觉得这很丑陋,我错过了一些更容易、更优雅的东西。
您可以将$transition$
注入到解析函数中:
resolveBinding: function($transition$) {
console.log($transition$.to());
}
请参阅 $transition$ 文档。
这对你有帮助吗?