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

Posted

技术标签:

【中文标题】如何在离子中定位多个视图【英文标题】:how to position multiple views in ionic 【发布时间】:2015-02-07 22:36:08 【问题描述】:

我正在尝试使用 ionic 框架来构建一个内容菜单,该菜单有 2 个部分,来自不同的控制器。我在下面将它们指定为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>

路由器

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

当页面呈现时,&lt;ion-nav-view name="menuSubcontent"&gt; 是不可见的,尽管它在 DOM 中。我添加了一些 CSS 属性使其可见:

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

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

【问题讨论】:

嗨,Dinesh,你解决了这个问题吗? Codepen 可能会帮助我们其他人更轻松地尝试解决问题并提出一些建议。 【参考方案1】:
<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

【讨论】:

【参考方案2】:

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

<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'
  

)

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

登录菜单.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>

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

希望对你有所帮助。

【讨论】:

以上是关于如何在离子中定位多个视图的主要内容,如果未能解决你的问题,请参考以下文章

如何在离子中刷新视图

如何从 Windows 调试离子视图中的应用程序?

如何将多个视图定位在相同的距离上[重复]

如何使用具有离子和角度的照片相机在firebase中同时保存多个图像

如何在离子选择上获得多个值

如何在真实设备中使用离子运行移动应用程序