防止在离子应用程序中导航

时间:2016-02-17 12:53:15

标签: javascript angularjs cordova ionic-framework

我正在尝试阻止导航并在控制器中显示弹出窗口。

$rootScope.$on('$stateChangeStart', function(event, toState, toParams, fromState, fromParams) {
  if(someConditionMet) {
    event.preventDefault();
    showPopup();
  }
}

除了标签导航之外,这就像魅力一样。它无法正确阻止导航并导航到选项卡然后显示弹出窗口。由于范围更改弹出窗口无法正确加载并引发异常,因此此处出现了另一个问题。我只看到一个空白的弹出窗口,在此之后无法退出。

编辑 - Plunker演示http://plnkr.co/edit/r8MxO6tDZfTlHPXrVJlM?p=preview

从侧面菜单中按关于它可以正常阻止。然后按设置选项卡。它正试图导航到设置选项卡,然后显示弹出窗口。此外,无法成功加载设置标签。

1 个答案:

答案 0 :(得分:2)

我编辑了“设置”状态(名称“tabs.about”,嵌套到“标签”):

.state('tabs.about', {
  url: '/about',
  controller: 'AboutCtrl',
  templateUrl: 'about.html'
});

然后我创建了一个附加到<body>的新控制器(“mainCtrl”)并在此移动$stateChangeStart事件处理程序,因此它可以监听事件而不考虑当前状态(以前是在家庭控制器中):

  $rootScope.$on('$stateChangeStart', function(event, toState, toParams, fromState, fromParams) {
    var txt = '$stateChangeStart from: '+fromState.name+" to "+toState.name;
    console.log(txt);
    $rootScope.log = txt;
  })

这是一个更新的plunker:

http://plnkr.co/edit/xcTMzPJdTVgVxV5jgpho