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
(可選)
|
字串
|
顯示在父 |
hide-back-button
(可選)
|
布林值
|
預設情況下,是否在父 |
hide-nav-bar
(可選)
|
布林值
|
預設情況下,是否隱藏父 |
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
(可選)
|
字串
|
該控制代碼用 |
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 |
字串
|
在父 |
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 回退檢視,如果回退的檢視存在。