如何在离子中定位多个视图

时间:2014-12-09 21:21:41

标签: angularjs ionic-framework

我正在尝试使用离子框架来构建一个内容菜单,其中包含两个部分,来自不同的控制器。我已将它们指定为view: menuContentview: menuSubcontent

HTML

<ion-side-menus>
    <ion-side-menu-content>
        <ion-nav-bar class="main bar-stable nav-title-slide-ios7">
            <ion-nav-back-button class="button-clear"><i class="icon"></i></ion-nav-back-button>
        </ion-nav-bar>

        <ion-nav-view name="menuContent" animation="slide-left-right"></ion-nav-view>
        <ion-nav-view name="menuSubcontent"></ion-nav-view>

    </ion-side-menu-content>

    <ion-side-menu side="left">
        <header class="bar bar-header bar-stable">
            <h1 class="title">Left</h1>
        </header>
        <ion-content class="has-header">
            <ion-list>
                <ion-item nav-clear menu-close ng-click="login()">
                    Login
                </ion-item>
                <ion-item nav-clear menu-close href="#/app/morestuff">
                    etc.
                </ion-item>
            </ion-list>
        </ion-content>
    </ion-side-menu>
</ion-side-menus>

ROUTER

.state('app.playlists', {
    url: "/playlists",
    views: {
        'menuContent': {
            templateUrl: "templates/playlists.html",
            controller: 'PlaylistsCtrl'
        },
        'menuSubcontent': {
            template: "<span>subcontent of playlists</span>"
            }
        }
    })

当页面呈现时,<ion-nav-view name="menuSubcontent">虽然在DOM中,但是不可见。我添加了一些CSS属性以使其可见:

z-index: 2
margin-top: 400px; /* some arbit large number */

我想知道这是否是正确的方法(将我自己的css类添加到menuSubcontent),或者是否有系统的方式使用框架,该框架在多个视图的定位中取出 guesswork 。我还在学习如何使用这个框架。

2 个答案:

答案 0 :(得分:0)

<ion-side-menus ng-controller="SideMenuController">

  <!-- Header Changes -->
  <ion-side-menu-content drag-content="false">
    <ion-nav-bar class="bar bar-header bar-positive">

      <!-- Open Sidebar Menu Start-->
      <ion-nav-buttons side="left">
        <button class="button button-icon icon ion-navicon" menu-toggle="left"></button>
      </ion-nav-buttons>
      <!-- Open Sidebar Menu End -->

      <ion-nav-back-button class="button-clear">
        <i class="ion-chevron-left"></i> Back
      </ion-nav-back-button>

      <!-- Open Sidebar Menu Start-->
      <ion-nav-buttons side="right">
        <button class="button button-icon icon ion-refresh" ng-click="doRefresh()"></button>
      </ion-nav-buttons>
      <!-- Open Sidebar Menu End -->

    </ion-nav-bar>

    <ion-nav-view name="main" animation="slide-left-right">
    </ion-nav-view>

  </ion-side-menu-content>
  <!-- Header Changes -->

  <!-- SideMenu Contents -->
  <ion-side-menu side="left" class="light-bg dark-border">

    <header class="bar bar-header bar-light">
      <h1 class="title">Route Menu</h1>
    </header>

    <ion-content class="has-header">
      <div class="list">

        <a menu-close class="item item-icon-left" href="#/app/home">
          <i class="icon fa fa-bank fa-ionicon"></i>
          Home
        </a>

    </ion-content>
    <!-- SideMenu Contents -->
  </ion-side-menu>


</ion-side-menus>



    //** abstract route for sidemenu
    $stateProvider.state('app', {
      url: '/app',
      abstract: true,
      templateUrl: 'templates/sidemenu.tpl.htm'

    });

    //!** Home
    $stateProvider.state('app.home', {
      url: '/home',
      views: {
        'main': {
          templateUrl: 'app/home/home.tpl.htm'
        }
      }

    });

在路线中将模板定义为摘要: 资料来源:http://codepen.io/ionic/pen/vqhzt

答案 1 :(得分:0)

如果您在同一页面中保留多个,则必须进行如下配置,

<ion-tab title="Rooms" icon-off="ion-ios7-box-outline" icon-on="ion-ios7-box" href="#/tab/rooms">
    <ion-nav-view name="tab-rooms"></ion-nav-view>
</ion-tab>

<ion-tab title="Chat" icon-off="ion-ios7-chatboxes-outline" icon-on="ion-ios7-chatboxes" href="#/tab/chat">
    <ion-nav-view name="tab-chat"></ion-nav-view>
</ion-tab>

因此基于url的相应视图将获得渲染,

否则,您可以为每个视图创建单独的状态,如下所示

.state('menuLogin', {
url: '/menuLogin',
abstract: true,
templateUrl: 'templates/loginMenu.html'

})

.state('menuMain', {
url: '/menuMain',
cache:false,
abstract: true,
templateUrl: 'templates/mainMenu.html'
})

.state('menuLogin.login', {
url: '/login',
views: {
  'menuContent': {
    templateUrl: 'templates/login.html',
    controller: 'LoginCtrl'
  }
}
})

.state('menuMain.main', {
url: '/main',
views: {
  'menuContent': {
    templateUrl: 'templates/main.html',
    controller: 'MainCtrl'
  }
}
})

所以第一个状态属于登录菜单,第二个属于主菜单。

Loginmenu.html:

<ion-nav-bar class="bar-positive" align-title="center">
<ion-nav-back-button class="no-text">
</ion-nav-back-button>
</ion-nav-bar>
<ion-nav-view name="menuContent" align-title="center"></ion-nav-view>

和Mainmenu.html:

<ion-nav-bar class="bar-positive" align-title="center" style="text-align:center;">
<ion-nav-back-button class="no-text">
</ion-nav-back-button>
<ion-nav-buttons side="right">
<button class="button button-icon button-clear ion-navicon" menu-toggle="right">
</button>
</ion-nav-buttons>
</ion-nav-bar>
<ion-nav-view name="menuContent" align-title="center"></ion-nav-view>

所以你可以自定义这样的状态。

希望这会对你有所帮助。