0

我正在从 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中将失败,因为thisis now null,而之前它包含有关它正在转换到的状态的信息。

如何在此代码块中获取州名称?

我正在考虑使用$transitions.onBefore挂钩将名称放在 上rootScope,并执行以下操作:

resolveBinding: function($rootScope, DependencyResolver) {
    let targetStateName = $rootScope.hackyStateName 
    return DependencyResolver.doSomeThingsFor(targetStateName)
}

但我觉得这很难看,我错过了一些更简单、更优雅的东西。

4

1 回答 1

2

您可以注入$transition$解析函数:

resolveBinding: function($transition$) {
  console.log($transition$.to());
}

请参阅$transition$ 文档

这对你有帮助吗?

于 2017-03-22T15:58:30.203 回答