AngularJS UI-Router v1.0: 在解析期间获取状态名称

AngularJS UI-Router v1.0: getting state name during resolving

我正在从 UI-Router 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$ documentation

对你有帮助吗?