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入门·对象属性方法大总结
Oct 01 Javascript
JavaScript Event学习第六章 事件的访问
Feb 07 Javascript
解析js中获得父窗口链接getParent方法以及各种打开窗口的方法
Jun 19 Javascript
将list转换为json失败的原因
Dec 17 Javascript
JavaScript 模块化编程(笔记)
Apr 08 Javascript
js下拉选择框与输入框联动实现添加选中值到输入框的方法
Aug 17 Javascript
JavaScript简单下拉菜单特效
Sep 13 Javascript
vue.js将unix时间戳转换为自定义时间格式
Jan 03 Javascript
Bootstrap表格使用方法详解
Feb 17 Javascript
详解 vue.js用法和特性
Oct 15 Javascript
分享ES6的7个实用技巧
Jan 18 Javascript
webpack+vue-cli项目中引入外部非模块格式js的方法
Sep 28 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
基于文本的访客签到簿
2006/10/09 PHP
Zend Framework页面缓存实例
2014/06/25 PHP
PHP基于自定义类随机生成姓名的方法示例
2017/08/05 PHP
php实现映射操作实例详解
2019/10/02 PHP
慎用 somefunction.prototype 分析
2009/06/02 Javascript
javascript调试说明
2010/06/07 Javascript
javascript中类的定义及其方式(《javascript高级程序设计》学习笔记)
2011/07/04 Javascript
jQuery使用ajaxSubmit()提交表单示例
2014/04/04 Javascript
javascript使用for循环批量注册的事件不能正确获取索引值的解决方法
2014/12/20 Javascript
javascript实现网站加入收藏功能
2015/12/16 Javascript
在js代码拼接dom对象到页面上去的模板总结(必看)
2017/02/14 Javascript
jQuery实现html双向绑定功能示例
2017/10/09 jQuery
微信小程序列表渲染功能之列表下拉刷新及上拉加载的实现方法分析
2017/11/27 Javascript
JsChart组件使用详解
2018/03/04 Javascript
Javascript实现购物车功能的详细代码
2018/05/08 Javascript
jQuery实现监听下拉框选中内容发生改变操作示例
2018/07/13 jQuery
vue项目部署到Apache服务器中遇到的问题解决
2018/08/24 Javascript
JavaScript 高性能数组去重的方法
2018/09/20 Javascript
Vue清除定时器setInterval优化方案分享
2020/07/21 Javascript
js 实现碰撞检测的示例
2020/10/28 Javascript
详解Python的迭代器、生成器以及相关的itertools包
2015/04/02 Python
只需7行Python代码玩转微信自动聊天
2019/01/27 Python
深入了解和应用Python 装饰器 @decorator
2019/04/02 Python
Anaconda和ipython环境适配的实现
2020/04/22 Python
如何利用python检测图片是否包含二维码
2020/10/15 Python
美津浓美国官网:Mizuno美国
2018/08/07 全球购物
阿联酋优惠券服务:Living Kool
2019/12/12 全球购物
怎么处理XML的中文问题
2015/03/26 面试题
什么是JNDI的上下文?如何初始化JNDI上下文
2012/03/10 面试题
手术室护士长竞聘书
2014/03/31 职场文书
好听的队名和口号
2014/06/09 职场文书
护理学院专科毕业生求职信
2014/06/28 职场文书
大学竞选班干部演讲稿
2014/08/21 职场文书
小学生勤俭节约演讲稿
2014/08/28 职场文书
校园新闻稿范文
2015/07/18 职场文书
2015年学校综合治理工作总结
2015/07/20 职场文书