你可以在不切换标签的情况下在ui-router视图之间切换吗?

时间:2016-01-20 01:35:52

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

我正在使用Ionic和Angular 1(使用ui-router)。我们说我有两个标签:

+----+   +-------+
|HOME|   |PROFILE|
+----+   +-------+

这是重要的部分:HOME标签中的链接到/profile ... 但是,我不希望它自动切换到单击该链接时PROFILE选项卡...我想继续使用 HOME选项卡中的导航堆栈

使用ui-router有多个嵌套状态的常用方法是like this(这个例子有些不必要的东西被故意省略):

$stateProvider
.state('app', {
  abstract: true,
  template: require('templates/app.html'),
})
.state('app.home', {
  template: require('templates/home.html'),
  url: '/home',
  controller: 'HomeCtrl',
  views: {
    // a bunch of child views that can only belong to this state
  }
})
.state('app.profile', {
  template: require('templates/profile.html'),
  url: '/profile',
  controller: 'ProfileCtrl',
  views: {
    // a bunch of child views that can only belong to this state
  }
});

但是,如果我想导航到 app.profile内的app.home ,而不是被迫更改标签,该怎么办?

一个选项是使我的所有选项卡都是抽象的,然后为每个可能的状态(使用循环)声明<tab>.<state>,但这似乎需要很多可能不必要的开销:

var abstractStates = [
  {
    name: 'home',
    url: '/home',
    controller: 'HomeCtrl',
    template: require('templates/home.html')
  },
  {
    name: 'profile',
    url: '/profile',
    controller: 'ProfileCtrl',
    template: require('templates/profile.html')
  }
];

abstractStates.forEach(function(state) {
  $stateProvider.state(state.name, _.omit(state, ['name']);

  abstractStates.forEach(function(nestedState) {
    $stateProvider.state([state.name, nestedState.name].join('.'), _.omit(nestedStates, ['abstract', 'name']));
  });
});

有没有更好的方法来实现这一目标?

0 个答案:

没有答案