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的 body 中。

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>
Ionic Navigation State

创建导航菜单

您可以通过在index.html的 body 中添加“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();
   };
}  
Ionic Navigation Back Button

添加导航元素

可以使用ion-nav-buttons将按钮添加到导航栏。此元素应放置在ion-nav-barion-view内。我们可以使用四个选项值分配side属性。primarysecondary值将根据使用的平台放置按钮。有时您希望按钮位于一侧,无论它是 iOS 还是 Android。如果是这种情况,您可以使用leftright属性代替。

我们还可以将ion-nav-title添加到导航栏。所有代码都将放置在index.html的 body 中,因此可以在任何地方使用。

<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 Navigation Elements

其他导航属性

下表显示了一些其他功能,这些功能可以与 Ionic 导航一起使用。

导航属性

属性 选项 详情
nav-transitionnone, iOS, Android 用于设置过渡发生时应应用的动画。
nav-directionforward, back, enter, exit, swap 用于设置过渡发生时动画的方向。
hardwareBackButtonClose布尔值 它将在点击硬件后退按钮时启用关闭模态框。默认值为 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 字符串 用于对齐标题。
showBackButton(parameter)show 布尔值 用于显示或隐藏后退按钮。
title(parameter)title 字符串 用于显示新标题。

跟踪历史记录

您可以使用$ionicHistory服务跟踪上一个、当前和下一个视图的历史记录。下表显示了此服务的所有方法。

用于 $ionicHistory 的方法

方法 参数 类型 详情
viewHistory/ 对象 返回应用程序视图历史记录数据。
currentView()/ 对象 返回当前视图。
title(parameter)title 字符串 返回当前视图的父视图的 ID。
currentTitle(parameter)val 字符串 返回当前视图的标题。可以通过设置新的val值来更新它。
backView()/ 字符串 返回上一个后退视图。
backTitle()/ 字符串 返回上一个后退视图的标题。
forwardView()/ 对象 返回上一个前进视图。
currentStateName()/ 字符串 返回当前状态名称。
goBack()backCount 数字 用于设置要返回多少个视图。数字应为负数。如果它是正数或零,则不会有任何影响。
clearHistory()/ / 用于清除整个视图历史记录。
clearCache()/ promise 用于清除所有缓存的视图。
nextViewOptions()/ 对象 设置下一个视图的选项。您可以查看以下示例以获取更多信息。

nextViewOptions()方法有以下三个选项可用。

  • disableAnimate用于禁用下一个视图更改的动画。

  • disableBack将后退视图设置为 null。

  • historyRoot将下一个视图设置为根视图。

$ionicHistory.nextViewOptions({
   disableAnimate: true,
   disableBack: true
});
广告