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 相关文章推荐
农历与西历对照
Sep 06 Javascript
javascript 特殊字符串
Feb 25 Javascript
js动态加载以及确定加载完成的代码
Jul 31 Javascript
javascript实用小函数使用介绍
Nov 11 Javascript
javascript使用百度地图api和html5特性获取浏览器位置
Jan 10 Javascript
jQuery中size()方法用法实例
Dec 27 Javascript
javascript实现淘宝幻灯片广告展示效果
Apr 27 Javascript
JS中传递参数的几种不同方法比较
Jan 20 Javascript
Angular整合zTree的示例代码
Jan 24 Javascript
微信小程序的部署方法步骤
Sep 04 Javascript
layui table 表格上添加日期控件的两种方法
Sep 28 Javascript
js简单实现自动生成表格功能示例
Jun 02 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
需要注意的几个PHP漏洞小结
2012/02/05 PHP
解析thinkphp中的导入文件标签
2013/06/20 PHP
php实现生成验证码实例分享
2016/04/10 PHP
基于jquery用于查询操作的实现代码
2010/05/10 Javascript
javascript中万恶的function实例分析
2011/05/25 Javascript
分享几个超级震憾的图片特效
2012/01/08 Javascript
JavaScript之编码规范 推荐
2012/05/23 Javascript
javascript实现全角转半角的方法
2016/01/23 Javascript
详解jQuery停止动画——stop()方法的使用
2016/12/14 Javascript
Vue.js展示AJAX数据简单示例讲解
2017/03/29 Javascript
JavaScript实现动态添加Form表单元素的方法示例
2017/08/14 Javascript
详解如何去除vue项目中的#——History模式
2017/10/13 Javascript
JavaScript实现图片懒加载的方法分析
2018/07/05 Javascript
实例分析vue循环列表动态数据的处理方法
2018/09/28 Javascript
react-router4按需加载(踩坑填坑)
2019/01/06 Javascript
使用layer.msg 时间设置不起作用的解决方法
2019/09/12 Javascript
Vue.js实现可编辑的表格
2019/12/11 Javascript
javascript实现扫雷简易版
2020/08/18 Javascript
[12:51]71泪洒现场!是DOTA2让经典重现
2014/03/24 DOTA
python正则表达式re模块详解
2014/06/25 Python
Linux下使用python调用top命令获得CPU利用率
2015/03/10 Python
编写同时兼容Python2.x与Python3.x版本的代码的几个示例
2015/03/30 Python
Python json模块使用实例
2015/04/11 Python
学习python 之编写简单乘法运算题
2016/02/27 Python
利用Python-iGraph如何绘制贴吧/微博的好友关系图详解
2017/11/02 Python
Python基于read(size)方法读取超大文件
2020/03/12 Python
python解决OpenCV在读取显示图片的时候闪退的问题
2021/02/23 Python
瑞典时尚服装购物网站:Miinto.se
2017/10/30 全球购物
什么是Deployment descriptors;都有什么类型的部署描述符
2015/07/28 面试题
EJB发布WEB服务一般步骤
2012/10/31 面试题
毕业生就业自荐信
2013/12/04 职场文书
高校优秀辅导员事迹材料
2014/05/07 职场文书
企业安全生产月活动总结
2014/07/05 职场文书
2016学习雷锋精神活动倡议书
2015/04/27 职场文书
python实现简单倒计时功能
2021/04/21 Python
Python预测分词的实现
2021/06/18 Python