$ state.go不会重定向到给定路径

时间:2014-11-04 11:10:32

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

我有一个超出我标签的视图,现在当我尝试从该视图重定向到一个标签时,我被重定向到错误的标签。我做了一个codepen来向你展示我的意思,因为我真的不知道如何解释它,看看我在控制台中创建的日志

  .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

4 个答案:

答案 0 :(得分:1)

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

另一个问题是,当你点击后退按钮时,状态正在变为tab.volgend(这是正确的)但是在此之后将转换为tab.alert状态......所以我试图计算为什么第二次重定向发生了呢。

单击后退按钮时从console.log中解压缩: enter image description here

我的第一位候选人是:

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

你不应该在标准路由中使用ui-route,所以你应该在控制器中注释这一行添加下一行:

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

修改

第二次转换是由离子框架完成的,我已经设置了断点并检查了callstack,检查了这个捕获:

单击后退时的第一次呼叫: enter image description here

2-离子框架检测到网址的变化,并触发第二次转换: enter image description here

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

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

为什么不简单地使用

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

答案 3 :(得分:0)

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

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

这在我的案例中得到了解决。

可以找到更多详细信息here

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