Javascript $state.go不’;t重定向到给定路径

Javascript $state.go不’;t重定向到给定路径,javascript,angularjs,angular-ui-router,ionic-framework,states,Javascript,Angularjs,Angular Ui Router,Ionic Framework,States,我有一个视图在我的选项卡之外,现在当我尝试从该视图重定向到选项卡时,我被重定向到错误的选项卡。我制作了一个代码笔来向您展示我的意思,因为我真的不知道如何解释。请看我在控制台中创建的日志 .controller('MyCtrl', function($scope, $state, $rootScope, $ionicPlatform) { $rootScope.$on('$stateChangeStart',function(event, toState, toParams, fro

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

  .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);
        }

    })

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

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

为什么不简单地使用

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

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

$state.transitionTo($scope.from.name);
我的情况就是这样

更多细节可以找到


编辑:我用叉子叉了你原来的代码笔,它也在那里工作了

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

另一个问题是,当您单击“上一步”按钮时,状态将更改为tab.volgend(这是正确的),但之后将变为tab.alert状态。。。所以我想弄清楚为什么会发生第二次重定向

单击“上一步”按钮时从console.log中提取:

我的第一位候选人是:

$urlRouterProvider.otherwise('/tab/alerts');
您不应该将ui路由与标准路由一起使用,因此您应该对此行进行注释,并在控制器中添加下一行:

  console.log('going to default state');
  $state.go('tab.alerts');
编辑 第二个转换是由ionic框架完成的,我设置了一个断点并检查了callstack,检查以下捕获:

1-单击“上一步”时的第一次呼叫:

2-爱奥尼亚框架检测到url和。。触发第二个转换:


我将更多地阅读这个框架,看看我是否理解为什么会发生这种情况。。。我会不断更新您的信息。

是的,应该是这样,但不是这样。这是我的问题,我在测试后忘了添加.name。我看了一下您的笔,出于某种原因,它成功重定向到tab.volgend,但随后再次重定向到tab.alerts。我们可以在我的代码笔中尝试一下。。。它不工作这是我的问题当我打开你的笔它不工作,试图将它应用到我的项目中,但也没有工作,仍然被重定向到警报模板仍然感谢输入对于那些想知道的人,我们有一个问题。应该注意的是,在大多数情况下建议使用
$state.go()
。谢谢,我还认为这可能与urlrouterprovider有关,所以我将其注释掉。但它并没有解决我的问题,我正在解决它,我启动了一个JSFIDLE,它对我来说更容易分叉:谢谢,我还没弄明白。这是我的应用程序中剩下的最后一个bug之一,也是一个很大的bug:(