Ionic - Javascript 导航
导航是每个应用程序的核心组件之一。Ionic 使用 AngularJS UI Router 来处理导航。
使用导航
可以在 app.js 文件中配置导航。如果您使用其中一个 Ionic 模板,您会注意到 $stateProvider 服务已注入到应用程序 config 中。以下示例显示了为应用程序创建状态的最简单方法。
$stateProvider 服务将扫描 URL,找到相应的状态并加载我们在 app.config 中定义的文件。
app.js 代码
.config(function($stateProvider) { $stateProvider .state('index', { url: '/', templateUrl: 'templates/home.html'}) .state('state1', {url: '/state1', templateUrl: 'templates/state1.html'}) .state('state2', {url: '/state2', templateUrl: 'templates/state2.html',}); });
状态将加载到 ion-nav-view 元素中,该元素可以放置在 index.html 主体中。
index.html 代码
<ion-nav-view></ion-nav-view>
在上面的示例中创建状态时,我们使用了 templateUrl,因此加载状态时,它将搜索匹配的模板文件。现在,我们将打开 templates 文件夹并创建一个新文件 state1.html,当应用程序 URL 更改为 /state1 时,它将被加载。
state1.html 代码
<ion-view> <ion-content> This is State 1 !!! </ion-content> </ion-view>
创建导航菜单
您可以在 index.html 主体中添加 "ion-nav-bar" 元素,从而向您的应用添加导航栏。在导航栏内,我们将添加带有图标的 ion-nav-back-button。这将用于返回到上一个状态。状态更改时,按钮将自动显示。我们将分配 goBack() 函数,该函数将使用 $ionicHistory 服务来处理此功能。因此,当用户离开主状态并转到 state1 时,将出现可以点击的后退按钮,如果用户想要返回主状态。
index.html 代码
<ion-nav-bar class = "bar-positive"> <ion-nav-back-button class = "button-clear" ng-click = "goBack()"> <i class = "icon ion-arrow-left-c"></i> Back </ion-nav-back-button> </ion-nav-bar>
控制器代码
.MyCtrl($scope, $ionicHistory) { $scope.goBack = function() { $ionicHistory.goBack(); }; }
添加导航元素
可以使用 ion-nav-buttons 将按钮添加到导航栏。此元素应放置在 ion-nav-bar 或 ion-view 内。我们可以为 side 属性分配四个选项值。primary 和 secondary 值将根据所使用的平台放置按钮。有时,无论是 IOS 还是 Android,您都希望将按钮放在一侧。如果是这种情况,您可以改用 left 或 right 属性。
我们还可以将 ion-nav-title 添加到导航栏。所有代码都将放置在 index.html 正文中,因此可以在任何地方使用。
<ion-nav-bar class = "bar-positive"> <ion-nav-title> Title </ion-nav-title> <ion-nav-buttons side = "primary"> <button class = "button"> Button 1 </button> </ion-nav-buttons> </ion-nav-bar>
它将产生以下屏幕 −
其他导航属性
下表显示了一些其他功能,可与 Ionic 导航一起使用。
导航属性
属性 | 选项 | 详细信息 |
---|---|---|
nav-transition | none, iOS, Android | 用于设置动画应在转换发生时应用。 |
nav-direction | forward, back, enter, exit, swap | 用于设置转换发生时动画的方向。 |
hardwareBackButtonClose | Boolean | 单击硬件后退按钮时,它将启用关闭模式。默认值为 true。 |
缓存
Ionic 能够缓存多达十个视图以提高性能。它还提供了一种手动处理缓存的方法。由于只有向后视图被缓存,而向前视图每次用户访问时都会加载,因此我们可以使用以下代码轻松设置缓存向前视图。
$ionicCinfigProvider.views.forwardCache(true);
我们还可以设置应缓存多少个状态。如果我们想要缓存三个视图,我们可以使用以下代码。
$ionicConfigProvider.views.maxCache(3);
可以在 $stateProvider 中禁用缓存,也可以通过将属性设置为 ion-view 来禁用缓存。两个示例都在下面。
$stateProvider.state('state1', { cache: false, url : '/state1', templateUrl: 'templates/state1.html' }) <ion-view cache-view = "false"></ion-view>
控制导航栏
我们可以使用 $ionicNavBarDelegate 服务来控制导航栏的行为。此服务需要注入到我们的控制器中。
HTML 代码
<ion-nav-bar> <button ng-click = "setNavTitle('title')"> Set title to banana! </button> </ion-nav-bar>
控制器代码
$scope.setNavTitle = function(title) { $ionicNavBarDelegate.title(title); }
$ionicNavBarDelegate 服务有其他有用的方法。下表列出了其中一些方法。
$ionicNavBarDelegate 的方法
方法 | 参数 | 类型 | 详细信息 |
---|---|---|---|
align(parameter) | center, left, right | string | 用于对齐标题。 |
showBackButton(parameter) | show | Boolean | 用于显示或隐藏后退按钮。 |
title(parameter) | title | string | 用于显示新标题。 |
跟踪历史记录
您可以使用 $ionicHistory 服务跟踪上一个、当前和前进视图的历史记录。下表显示了此服务的所有方法。
$ionicHistory 的方法
方法 | 参数 | 类型 | 详细信息 |
---|---|---|---|
viewHistory | / | object | 返回应用视图历史数据。 |
currentView() | / | object | 返回当前视图。 |
title(parameter) | title | string | 返回当前视图的父视图的 ID。 |
currentTitle(parameter) | val | string | 返回当前视图的标题。可以通过设置新的 val 值来更新它。 |
backView() | / | string | 返回最后一个后退视图。 |
backTitle() | / | string | 返回最后一个后退视图的标题。 |
forwardView() | / | object | 返回最后一个前进视图。 |
currentStateName() | / | string | 返回当前状态名称。 |
goBack() | backCount | number | 用于设置返回的视图数。数字应为负数。如果为正数或零,则不会产生任何效果。 |
clearHistory() | / | / | 用于清除整个视图历史记录。 |
clearCache() | / | promise | 用于清除所有缓存的视图。 |
nextViewOptions() | / | object | 设置下一个视图的选项。您可以查看以下示例以了解更多信息。 |
nextViewOptions() 方法有以下三个可用选项。
disableAnimate 用于禁用下一个视图更改的动画。
disableBack 将后视图设置为 null。
historyRoot 将下一个视图设置为根视图。
$ionicHistory.nextViewOptions({ disableAnimate: true, disableBack: true });