AngularJS UI-Router v1.0:在解析过程中获取状态名称



我正在从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$ 文档。

这对你有帮助吗?

相关内容

  • 没有找到相关文章

最新更新