【问题标题】:ui-router get transition informationui-router 获取转换信息
【发布时间】:2016-05-26 13:44:44
【问题描述】:

我有以下场景:

在解析阶段,有时刷新某些依赖项会失败。在捕获 $rootScopeService 上的错误并优雅地处理它时,我需要更早地知道(在 $exceptionHandler 服务的装饰器实现中)我在从一种状态转换到另一种状态期间失败了。

$state 服务提供了转换,不幸的是,它在解析成功后被填充,所以我不能使用它。

有什么已经实现了吗?

我目前的想法是实现附加服务或装饰 $state 服务以使用 go 函数或简单地通过侦听 $state 事件来设置值。

是否有任何已经实现的逻辑可以实现这一点? (我的意思是在图书馆)或者对此有任何其他建议吗?

谢谢

【问题讨论】:

    标签: javascript angularjs angular-ui-router


    【解决方案1】:

    这可能是穷人的解决方案,但您可以使用类似的方法:

    $rootScope.$on('$stateChangeStart', function(e, toState, toParams, fromState, fromParams, $rootScope) {
       $rootScope.targetState = toState })
    
    $rootScope.$on('$stateChangeSuccess', 
        function(e, toState, toParams, fromState, fromParams, $rootScope){
             $rootScope.targetState = undefined })
    

    然后在您的解析功能中,通过以下方式访问目标状态:

    function myResolve($rootScope) {
        console.log($rootScope.targetState)
    }
    

    我在我的一个应用程序中有这个工作。 statechange 监控是在我的应用程序的运行块中实现的。

    【讨论】:

    • 如何访问 toState 参数。
    • 编辑答案。是 statechangesuccess,不完整。
    • 这是我已经提出的解决方案。 toState 不存在,需要进行某种扩展。无论如何,答案与问题有点无关,因为它已经在问题本身中说明了。
    • toState 哪里不存在?我刚刚在我的应用程序中使用 console.log(toState.name + "start") 和 console.log(toState.name + "success") 和 console.log("resolve") 尝试了这个,一切都按预期工作。
    • 我假设您的意思是在解决方案中您无法访问该状态。你的问题并不完全清楚。我已经修改了答案来完成这个。
    猜你喜欢
    • 2014-05-24
    • 1970-01-01
    • 1970-01-01
    • 2019-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多