【问题标题】:Angularjs Nested states: 3 levelAngularjs嵌套状态:3级
【发布时间】:2014-03-16 03:00:34
【问题描述】:

我正在使用 Agnularjs 和 Ionic 框架。我正在尝试实现嵌套状态,如下所示,

  • 事件菜单(根)
  •   家(2 层)
  •     家庭 1(3 层)
  •     首页 2
  •   签入
  •  与会者

我的路线文件看起来像,

angular.module('ionicApp', ['ionic'])

.config(function($stateProvider, $urlRouterProvider) {

  $stateProvider
    .state('eventmenu', {
      url: "/event",
      abstract: true,
      templateUrl: "event-menu.html"
    })
    .state('eventmenu.home', {
      url: "/home",
      views: {
        'menuContent' :{
          templateUrl: "home.html"
        }
      }
    })
      .state('eventmenu.home.home1', {
      url: "/home1",
      views: {
        'menuContent' :{
          templateUrl: "home1.html"
        }
      }
    })
        .state('eventmenu.home.home2', {
      url: "/home2",
      views: {
        'menuContent' :{
          templateUrl: "home2.html"
        }
      }
    })
    .state('eventmenu.checkin', {
      url: "/check-in",
      views: {
        'menuContent' :{
          templateUrl: "check-in.html",
          controller: "CheckinCtrl"
        }
      }
    })
    .state('eventmenu.attendees', {
      url: "/attendees",
      views: {
        'menuContent' :{
          templateUrl: "attendees.html",
          controller: "AttendeesCtrl"
        }
      }
    })

  $urlRouterProvider.otherwise("/event/home");
})

完整示例请见codepen:http://codepen.io/liamqma/pen/mtBne

/event/home
/event/checkin

正在工作,但是

/event/home/home1
/event/home/home2

不工作。

非常感谢任何帮助。谢谢!

【问题讨论】:

  • 离子部分在哪里?这看起来像一个普通的 angularJS 应用程序,任何地方都没有 Ionic 指令......

标签: angularjs angularjs-routing ionic-framework


【解决方案1】:

我在那里解决了你的问题:http://codepen.io/yrezgui/pen/mycxB

基本上,Ionic 使用的是 Angular-UI-Router,它有一个庞大的 API。在您的情况下,您需要查看此链接以了解:https://github.com/angular-ui/ui-router/wiki/Multiple-Named-Views#view-names---relative-vs-absolute-names

简而言之,home1 和 home2 状态是 home 状态的子状态,因此它们无法访问 menuContent 视图,因为它与 eventmenu 状态有关。

所以你需要写:

.state('eventmenu.home.home2', {
  url: "/home2",
  views: {
    'menuContent@eventmenu' :{
      templateUrl: "home2.html"
    }
  }
})

而不是:

.state('eventmenu.home.home2', {
  url: "/home2",
  views: {
    'menuContent' :{
      templateUrl: "home2.html"
    }
  }
})

即使在此修改之后 home1 也无法正常工作,因为它的 url 是:

url: "/home/home1",

而不是:

url: "/home1",

通过编写 eventmenu.home.home1,您可以使 home1 成为 home 的子级,因此它的 url 需要是相对的,而不是绝对的.

希望您能理解并享受 Ionic 的乐趣;)

【讨论】:

  • 问题是你没有得到甜蜜的离子页面转换:'(尽管如此@Yacine 的帖子很棒
  • 如果 eventmenu.home 状态也是一个抽象层,就像 eventmenu 一样?
  • @MarcelFalliere 你的案子有没有很好的过渡效果?我尝试了一切,为具有单独 ion-nav-view 的 2 级页面创建抽象层,但视图正在跳跃......?
  • 谢谢。所以换句话说,在视图名称后添加带有@的父级。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-04-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-09
  • 2018-11-29
相关资源
最近更新 更多