Ionic2系列之使用DeepLinker实现指定页面URL


Posted in Javascript onNovember 21, 2016

Ionic2使用了近似原生App的页面导航方式,并不支持Angular2的路由。这种方式在开发本地App的时候比较方便,但如果要用来开发纯Web页面就有点问题了,这种情况下Angular2的router可以提供更灵活的配置。比如在首页是一个Tabs页面的情况下,如何控制用户看到的第一项Tab?默认情况下都是会导航到第一个Tab,而且地址栏的URL并不会跟随页面的切换而变化。好在Ionic2提供了一种类似路由的DeepLinker功能,可以实现以上目的。

DeepLinker与NavController一起工作,但是用户基本不会直接与这个东西打交道。只有用户需要对URL进行处理的时候才需要配置这个。使用DeepLinker后,如果NavController push了一个新的页面,DeepLinker会在配置中寻找匹配的URL设置并更新URL。

我们的需求场景是这样的,在微信公众号的菜单栏有n个菜单,点击不同的菜单,需要直接导航到我们页面对应的Tab上,而不是让用户再去选择Tab。下面说一下具体做法。

首先新建一个Ionic2项目。目前最新的CLI已经升级到了2.1.12,ionic-angular升级到了RC3,强烈建议更新。使用以下命令来创建一个Tabs模板的项目:

ionic start TabsDemo tabs --v2

默认会建立有三个Tab页的项目。主要有4个页面,一个Tabs是主页面,其他三个Tab页分别是home,about,contact。

基本用法

DeepLinker是在IonicModule.forRoot方法中使用,作为第三个参数:

imports: [
IonicModule.forRoot(MyApp, {}, {
links: []
})
]

数组里的对象是DeepLinkerConfig,配置了URL和页面的匹配关系,一般来说是这样子的:

imports: [
IonicModule.forRoot(MyApp, {}, {
links: [
{ component: HomePage, name: 'Home', segment: 'home' }
]
})
]

也就是说,当浏览HomePage这个页面的时候,URL会变成http://examplesite/#/home/home

传参

有的时候也需要从URL传递参数,可以用下面的形式:

links: [
{ component: HomePage, name: 'Home', segment: 'home' }
{ component: DetailPage, name: 'Detail', segment: 'detail/:user' }
]

这样在DetailPage的ts文件中就可以接收user这个参数,进行处理。需要注意的是,这个参数应该是可以被DeepLinker序列化的,因此建议设置为一个string或number。

实现跳转到指定Tab

修改app.module.ts文件,将IonicModule.forRoot方法改为如下代码:

IonicModule.forRoot(MyApp, {}, {
links: [
{ component: TabsPage, name: 'Tabs', segment: 'tabs/:tabId' }
]
})

这里的意思是,给Tabs页传一个参数,如http://examplesite/#/tabs/1,这样就让App直接跳到第二个Tab。

修改tabs.ts文件,改为如下代码:

export class TabsPage {
// this tells the tabs component which Pages
// should be each tab's root Page
tab1Root: any = HomePage;
tab2Root: any = AboutPage;
tab3Root: any = ContactPage;
public tabId: number;
public selectTabIndex: number;
constructor(public params: NavParams) {
this.tabId = params.get("tabId");
if(this.tabId != undefined || this.tabId !=null)
{
this.selectTabIndex = this.tabId;
}
}
}

添加了两个变量,然后通过NavParams取得传递过来的参数并赋值给selectTabIndex。

修改tabs.html,给Tabs组件添加一个绑定:

<ion-tabs selectedIndex={{selectTabIndex}}>

运行ionic serve命令,会自动打开http://localhost:8100/地址,现在打开一个新窗口,输入http://localhost:8100/#/tabs/1,OK,直接跳到第二个Tab了。打完收工。

默认历史

还有一种情况,如果从其他页面直接导航到内部的页面,当点击返回的时候,该返回哪个页面呢?比如从推送通知进到新闻详情页面,当点击返回的时候,应该返回首页。所以Ionic2提供了defaultHistory参数,如果页面历史堆栈中不存在历史页面的时候,就会返回到这个页面。用法如下:

links: [
{ component: HomePage, name: 'Home', segment: 'home' }
{ component: DetailPage, name: 'Detail', segment: 'detail/:user', defaultHistory: [HomePage] }
]

以上所述是小编给大家介绍的Ionic2系列之使用DeepLinker实现指定页面URL,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
JavaScript 检测浏览器和操作系统的脚本
Dec 26 Javascript
jQuery Ajax使用 全解析
Dec 15 Javascript
用JSON做数据传输格式中的一些问题总结
Dec 21 Javascript
JS去除右边逗号的简单方法
Jul 03 Javascript
node.js WEB开发中图片验证码的实现方法
Jun 03 Javascript
Javascript遍历table中的元素示例代码
Jul 08 Javascript
关于JS中二维数组的声明方法
Sep 24 Javascript
简单实现jQuery上传图片显示预览功能
Jun 29 jQuery
Node解决简单重复问题系列之Excel内容的获取
Jan 02 Javascript
通过实践编写优雅的JavaScript代码
May 30 Javascript
vue控制多行文字展开收起的实现示例
Oct 11 Javascript
vue 添加和编辑用同一个表单,el-form表单提交后清空表单数据操作
Aug 03 Javascript
使用Angular.js实现简单的购物车功能
Nov 21 #Javascript
jQuery设置Easyui校验规则(推荐)
Nov 21 #Javascript
JS实现图片上传预览功能
Nov 21 #Javascript
值得分享的JavaScript实现图片轮播组件
Nov 21 #Javascript
使用Ajax生成的Excel文件并下载的实例
Nov 21 #Javascript
javascript入门之数组[新手必看]
Nov 21 #Javascript
jQuery UI插件实现百度提词器效果
Nov 21 #Javascript
You might like
学习使用curl采集curl使用方法
2012/01/11 PHP
Yii视图操作之自定义分页实现方法
2016/07/14 PHP
用于判断用户注册时,密码强度的JS代码
2009/01/01 Javascript
js中判断变量类型函数typeof的用法总结
2016/08/09 Javascript
利用angularjs1.4制作的简易滑动门效果
2017/02/28 Javascript
Vue键盘事件用法总结
2017/04/18 Javascript
React + webpack 环境配置的方法步骤
2017/09/07 Javascript
利用jqgrid实现上移下移单元格功能
2018/11/07 Javascript
详解三种方式解决vue中v-html元素中标签样式
2018/11/22 Javascript
微信小程序获取地理位置及经纬度授权代码实例
2019/09/18 Javascript
vue 路由守卫(导航守卫)及其具体使用
2020/02/25 Javascript
js实现页面导航层级指示效果
2020/08/25 Javascript
JavaScript用document.write()输出换行的示例代码
2020/11/26 Javascript
[58:35]OG vs EG 2019国际邀请赛淘汰赛 胜者组 BO3 第二场 8.22
2019/09/05 DOTA
搭建Python的Django框架环境并建立和运行第一个App的教程
2016/07/02 Python
Python实现更改图片尺寸大小的方法(基于Pillow包)
2016/09/19 Python
Python 爬虫学习笔记之正则表达式
2016/09/21 Python
Python实现基于二叉树存储结构的堆排序算法示例
2017/12/08 Python
Python实现针对给定单链表删除指定节点的方法
2018/04/12 Python
在Python中pandas.DataFrame重置索引名称的实例
2018/11/06 Python
对matplotlib改变colorbar位置和方向的方法详解
2018/12/13 Python
如何使用Python 打印各种三角形
2019/06/28 Python
Python 中Django安装和使用教程详解
2019/07/03 Python
python或C++读取指定文件夹下的所有图片
2019/08/31 Python
Python实现元素等待代码实例
2019/11/11 Python
Pycharm 2020年最新激活码(亲测有效)
2020/09/18 Python
Selenium环境变量配置(火狐浏览器)及验证实现
2020/12/07 Python
松下电器美国官方商店:Panasonic美国
2016/10/14 全球购物
另类冲刺标语
2014/06/24 职场文书
2014年社区民政工作总结
2014/12/02 职场文书
2014年英语教师工作总结
2014/12/03 职场文书
唐山大地震观后感
2015/06/05 职场文书
九年级历史教学反思
2016/02/19 职场文书
python scrapy简单模拟登录的代码分析
2021/07/21 Python
JavaCV实现照片马赛克效果
2022/01/22 Java/Android
Win11电源已接通但未充电怎么办?Win11电源已接通未充电的解决方法
2022/04/05 数码科技