ionic 導航


ion-nav-view

當用戶在你的app中瀏覽時,ionic能夠檢測到瀏覽歷史。通過檢測瀏覽歷史,實現向左或向右滑動時可以正確轉換檢視。

採用AngularUI路由器模組等應用程式介面可以分為不同的$state(狀態)。Angular的核心為路由服務,URLs可以用來控制檢視。

AngularUI路由提供了一個更強大的狀態管理,即狀態可以被命名,巢狀, 以及合併檢視,允許一個以上模板呈現在同一個頁面。

此外,每個狀態無需繫結到一個URL,並且資料可以更靈活地推送到每個狀態。

以下例項中,我們將建立一個應用程式中包含不同狀態的導航檢視。

我們的標記中選擇ionNavView作為頂層指令。顯示一個頁首欄我們用 ionNavBar 指令通過導航更新。

接下來,我們需要設定我們的將渲染的狀態值。

var app = angular.module('myApp', ['ionic']);
app.config(function($stateProvider) {
  $stateProvider
  .state('index', {
    url: '/',
    templateUrl: 'home.html'
  })
  .state('music', {
    url: '/music',
    templateUrl: 'music.html'
  });
});

再開啟應用,$stateProvider 會查詢url, 看是否匹配 index 狀態值, 再載入index.html到<ion-nav-view>。

頁面載入都是通過URLs配置的。在Angular中建立模板最一個簡單的方式就是直接將他放到html模板檔案中並且用<script type="text/ng-template"> 包含。

所以這也是一種方式將Home.html加入到我們的APP中來:

<script id="home" type="text/ng-template">
  <!--  ion-view 標題將顯示在 navbar 中 -->
  <ion-view view-title="Home">
    <ion-content ng-controller="HomeCtrl">
      <!-- The content of the page -->
      <a href="https://www.itread01.com/ionic/#/music">Go to music page!</a>
    </ion-content>
  </ion-view>
</script>

嘗試一下 ?

這是一個很好的方法,因為模板會很快的載入並被快取就不同通過網路再去載入。


快取

通常情況下,檢視都被快取了能提升效能。當跳出檢視時,他的元素被保留在Dom中,並且它的作用域也從 $watch 中移除。

當我們跳到一個已經被快取了的檢視,檢視會被啟用,它的作用域被重新連線上,Dom中也儲存了他的元素。這也允許保持以前的檢視滾動位置。

快取也可以通過很多方式來開啟和關閉的。預設Ionic將最大快取頁面數為10個,並且這並不是唯一可以定製的,應用程式可以顯式狀態來設定檢視應不應該被快取。

注意,因為我們是快取這些檢視,我們沒有破壞作用域。相反, 它的作用域也從 $watch 中移除。

因為接下來的觀看作用域並沒有被摧毀和重建,控制器也沒被再次載入。如果app/controller需要知道什麼時候進入或離開一個檢視,再檢視事件從 ionView 作用內發出, 例如 $ionicView.enter, 可能是有用的。

全域性禁用快取

$ionicConfigProvider 可以用於設定最大允許快取的檢視數量,通過設定為0來禁用所有快取。

$ionicConfigProvider.views.maxCache(0);

在STATE PROVIDER中禁用快取

$stateProvider.state('myState', {
   cache: false,
   url : '/myUrl',
   templateUrl : 'my-template.html'
})

通過屬性禁用快取

<ion-view cache-view="false" view-title="My Title!">
  ...
</ion-view>

AngularUI 路由

請訪問 AngularUI Router's docs 瞭解更多。

API

屬性 型別 詳情
name
(可選)
字串

一個檢視的名字。這個名字應該是在相同的狀態下其他檢視中唯一的。你可以在不同的狀態中有相同名稱的檢視。欲瞭解詳細資訊,檢視ui-router的 ui-view 文件。


ion-view

隸屬於ionNavView。 一個內容的容器,用於展示檢視或導航欄資訊。

下面是一個帶有"我的頁面"標題的導航欄載入頁面的例子。

<ion-nav-bar></ion-nav-bar>
<ion-nav-view class="slide-left-right">
  <ion-view title="我的頁面">
    <ion-content>
      你好!
    </ion-content>
  </ion-view>
</ion-nav-view>

API

屬性 型別 詳情
title
(可選)
字串

顯示在父ionNavBar的標題。

hide-back-button
(可選)
布林值

預設情況下,是否在父ionNavBar隱藏後退按鈕。

hide-nav-bar
(可選)
布林值

預設情況下,是否隱藏父ionNavBar


ion-nav-bar

建立一個頂部工具欄,當程式狀態改變時更新。

用法

<body ng-app="starter">
  <!-- 當我們瀏覽時,導航欄會隨之更新。 -->
  <ion-nav-bar class="bar-positive nav-title-slide-ios7">
  </ion-nav-bar>

  <!-- 初始化時渲染檢視模板 -->
  <ion-nav-view></ion-nav-view>
</body>

API

屬性 型別 詳情
delegate-handle
(可選)
字串

該控制代碼用$ionicNavBarDelegate標識此導航欄。

align-title
(可選)
字串

導航欄標題對齊的位置。可用: 'left', 'right', 'center'。 預設為 'center'。


ion-nav-buttons

隸屬於ionNavView

在ionView內的ionNavBar上用ionNavButtons設定按鈕。

你設定的任何按鈕都將被放置在導航欄的相應位置,當用戶離開父檢視時會被銷燬。

用法

<ion-nav-bar>
</ion-nav-bar>
<ion-nav-view>
  <ion-view>
    <ion-nav-buttons side="left">
      <button class="button" ng-click="doSomething()">
        我是一個在導航欄左側的按鈕!
      </button>
    </ion-nav-buttons>
    <ion-content>
      這裡是一些內容!
    </ion-content>
  </ion-view>
</ion-nav-view>

API

屬性 型別 詳情
side 字串

在父ionNavBar中按鈕放置的位置。 可用: 'left' 或 'right'。


ion-nav-back-button

在一個ionNavBar中建立一個按鈕。

當用戶在當前導航能夠後退時,將顯示後退按鈕。

用法

預設按鈕動作:

<ion-nav-bar>
  <ion-nav-back-button class="button-clear">
    <i class="ion-arrow-left-c"></i> 後退
  </ion-nav-back-button>
</ion-nav-bar>

自定義點選動作,用 $ionicNavBarDelegate:

<ion-nav-bar ng-controller="MyCtrl">
  <ion-nav-back-button class="button-clear"
    ng-click="canGoBack && goBack()">
    <i class="ion-arrow-left-c"></i> 後退
  </ion-nav-back-button>
</ion-nav-bar>
function MyCtrl($scope, $ionicNavBarDelegate) {
  $scope.goBack = function() {
    $ionicNavBarDelegate.back();
  };
}

在後退按鈕上顯示上一個標題,也用$ionicNavBarDelegate。

<ion-nav-bar ng-controller="MyCtrl">
  <ion-nav-back-button class="button-icon">
    <i class="icon ion-arrow-left-c"></i>{{getPreviousTitle() || 'Back'}}
  </ion-nav-back-button>
</ion-nav-bar>
function MyCtrl($scope, $ionicNavBarDelegate) {
  $scope.getPreviousTitle = function() {
    return $ionicNavBarDelegate.getPreviousTitle();
  };
}

nav-clear

nav-clear一個當點選檢視上的元素時用到的屬性指令,比如一個 <a href> 或者一個 <button ui-sref>。

當點選時,nav-clear將會導致給定的元素,禁止下一個檢視的轉換。這個指令很有用,比如,側欄選單內的連結。

用法

下面是一個側欄選單內添加了nav-clear指令的一個連結。點選該連結將禁用檢視間的任何動畫。

<a nav-clear menu-close href="https://www.itread01.com/ionic/#/home" class="item">首頁</a>

ion-nav-title

ion-nav-title 用於設定 ion-view 模板中的標題。

用法

<ion-nav-bar>
</ion-nav-bar>
<ion-nav-view>
  <ion-view>
    <ion-nav-title>
      <img src="https://www.itread01.com/ionic/logo.svg">
    </ion-nav-title>
    <ion-content>
      Some super content here!
    </ion-content>
  </ion-view>
</ion-nav-view>

nav-transition

設定使用的過渡型別,可以是:ios, android, 和 none。

用法

<a nav-transition="none" href="https://www.itread01.com/ionic/#/home">Home</a>

nav-direction

設定導航檢視中過渡動畫的方向,可以是forward, back, enter, exit, swap。

用法

<a nav-direction="forward" href="https://www.itread01.com/ionic/#/home">Home</a>

$ionicNavBarDelegate

授權控制 ion-nav-bar 指令。

用法

<body ng-controller="MyCtrl">
  <ion-nav-bar>
    <button ng-click="setNavTitle('banana')">
      Set title to banana!
    </button>
  </ion-nav-bar>
</body>

function MyCtrl($scope, $ionicNavBarDelegate) {
  $scope.setNavTitle = function(title) {
    $ionicNavBarDelegate.title(title);
  }
}

方法

align([direction])

在瀏覽歷史中後退。

引數 型別 詳情
event
(可選)
DOMEvent

事件物件(如來自點選事件)

align([direction])

帶有按鈕的標題對齊到指定的方向。

引數 型別 詳情
direction
(可選)
字串

標題文字對齊的方向。可用: 'left', 'right', 'center'。 預設: 'center'。

返回值: 布林值, 後退按鈕是否顯示。

showBar(show)

設定或獲取 ion-nav-bar 是否顯示。

引數 型別 詳情
show 布林值

導航欄是否顯示。

返回值: 布林值, 導航欄是否顯示。

showBackButton([show])

設定或獲取 ion-nav-back-button 是否顯示。

引數 型別 詳情
show
(可選)
布林值

是否顯示後退按鈕

title(title)

為ion-nav-bar設定標題。

引數 型別 詳情
title 字串

顯示新標題。


$ionicHistory

$ionicHistory 用於跟蹤使用者在 app 內的瀏覽記錄。

方法

viewHistory()

用於檢視歷史記錄。

currentView()

app 的當前檢視。

currentHistoryId()
歷史堆疊的 ID,是當前檢視的父類容器。

currentTitle([val])

獲取或設定當前檢視的標題。

backView()

返回上次瀏覽的檢視。

backTitle()

獲取上次瀏覽的檢視的標題。

forwardView()

返回歷史堆疊中當前檢視的上一個檢視。

currentStateName()

返回當前狀態名。

goBack([backCount])

app 回退檢視,如果回退的檢視存在。