【问题标题】:$state.go doesn’t redirect to given path$state.go 不会重定向到给定路径
【发布时间】:2014-12-31 06:08:14
【问题描述】:

我有一个在我的选项卡之外的视图,现在当我尝试从该视图重定向到一个选项卡时,我被重定向到错误的选项卡。我制作了一个代码笔来向您展示我的意思,因为我真的不知道如何解释它,请参阅我在控制台中创建的日志

  .controller('MyCtrl', function($scope, $state, $rootScope, $ionicPlatform) {
     $rootScope.$on('$stateChangeStart',function(event, toState, toParams, fromState, fromParams){ 
            // do something
            $scope.from = fromState;
            console.log(fromState);
        })

        $scope.goBack = function(){
            console.log($scope.from.name);
            $state.go($scope.from.name);
        }

    })

Codepen

【问题讨论】:

    标签: javascript angularjs angular-ui-router ionic-framework states


    【解决方案1】:

    您应该将状态名称传递给 $state.go(),而不是状态对象。

    所以 $state.go($scope.from.name) 应该为你解决这个问题。

    【讨论】:

    • 是的,但它不是我的问题,我测试后忘记添加 .name
    • 我查看了您的笔,由于某种原因,它成功重定向到 tab.volgend,但随后又从那里重定向到 tab.alerts。
    【解决方案2】:

    为什么不简单地使用

    $state.go('stateName', {//for stateParams}, { reload: true });
    

    【讨论】:

    • 在我的代码笔中尝试一下...它不起作用那是我的问题
    【解决方案3】:

    这也发生在我身上。尝试 transitionTo 方法,而不是 go

    $state.transitionTo($scope.from.name);
    

    这在我的情况下解决了。

    更多详情可以查看here

    编辑:我分叉了你原来的 codepen,它也在那里工作。Forked Codepen here

    【讨论】:

    • 当我打开你的笔时它不起作用,试图将它应用到我的项目中但也没有工作,仍然被重定向到警报模板仍然感谢输入
    • 对于那些想知道的人,我们有一个关于difference between $state.transitionTo() and $state.go() in AngularJS 的问题。需要注意的是$state.go()在大多数情况下是推荐的。
    【解决方案4】:

    您应该应用其他答案,但您还有另一个问题。

    另一个问题是,当您单击后退按钮时,状态正在更改为 tab.volgend(这是正确的),但在此之后将进入 tab.alert 状态......所以我试图找出原因这是第二次重定向吗?

    单击返回按钮时从 console.log 中提取:

    我的第一个候选人是:

    $urlRouterProvider.otherwise('/tab/alerts');
    

    您不应该将 ui-route 与标准路由一起使用,因此您应该注释此行并在您的控制器中添加下一行:

      console.log('going to default state');
      $state.go('tab.alerts');
    

    编辑

    第二个转换是由离子框架进行的,我已经放了一个断点并检查了调用堆栈,检查这个捕获:

    1- 单击返回时第一次调用:

    2- ionic 框架检测到 url 的变化并.. 触发第二个转换:

    我将阅读更多这个框架,看看我是否理解为什么会发生这种情况......我会及时更新。

    【讨论】:

    • 谢谢,我还认为它可能与 urlrouterprovider 有关,所以我将其注释掉。但它并没有修复我的错误
    • 我在上面,我创建了一个更容易 fork 的 jsfiddle:jsfiddle.net/vde0yj6j
    • 谢谢,还没弄明白。这是我的应用程序中剩下的最后一个错误之一,而且是一个大错误:(
    猜你喜欢
    • 2020-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-09
    • 1970-01-01
    • 2019-02-08
    相关资源
    最近更新 更多