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 HashTable
Jan 22 Javascript
跟我学Node.js(四)---Node.js的模块载入方式与机制
Jun 04 Javascript
javascript二维数组转置实例
Jan 22 Javascript
JS+CSS实现自动改变切换方向图片幻灯切换效果的方法
Mar 02 Javascript
node.js路径处理方法以及绝对路径详解
Mar 04 Javascript
ReactNative之键盘Keyboard的弹出与消失示例
Jul 11 Javascript
Webpack打包字体font-awesome的方法示例
Apr 26 Javascript
Angular angular-file-upload文件上传的示例代码
Aug 23 Javascript
element-ui组件table实现自定义筛选功能的示例代码
Mar 15 Javascript
使用element-ui的el-menu导航选中后刷新页面保持当前选中状态
Jul 19 Javascript
layui数据表格重载实现往后台传参
Nov 15 Javascript
vue使用localStorage持久性存储实现评论列表
Apr 14 Vue.js
使用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
声音就能俘获人心,蕾姆,是哪个漂亮小姐姐配音呢?
2020/03/03 日漫
深入解析PHP 5.3.x 的strtotime() 时区设定 警告信息修复
2013/08/05 PHP
[转]JS宝典学习笔记
2007/02/07 Javascript
Javascript-Mozilla和IE中的一个函数直接量的问题分析
2007/08/12 Javascript
javascript权威指南 学习笔记之null和undefined
2011/09/25 Javascript
ASP.NET jQuery 实例10 动态修改hyperlink的URL值
2012/02/03 Javascript
JSONP 跨域共享信息
2012/08/16 Javascript
javascript 弹出的窗口返回值给父窗口具体实现
2013/11/23 Javascript
Javascript基础教程之关键字和保留字汇总
2015/01/18 Javascript
谈谈encodeURI和encodeURIComponent以及escape的区别与应用
2015/11/24 Javascript
讲解JavaScript的Backbone.js框架的MVC结构设计理念
2016/02/14 Javascript
JS Attribute属性操作详解
2016/05/19 Javascript
实例解析jQuery工具函数
2016/12/01 Javascript
用nodejs搭建websocket服务器
2017/01/23 NodeJs
js 奇葩技巧之隐藏代码
2017/08/11 Javascript
jQuery Collapse1.1.0折叠插件简单使用
2017/08/28 jQuery
vue.js图片转Base64上传图片并预览的实现方法
2018/08/02 Javascript
最适应的vue.js的form提交涉及多种插件【推荐】
2018/08/27 Javascript
JS实现简单的文字无缝上下滚动功能示例
2019/06/22 Javascript
使用webpack搭建vue环境的教程详解
2019/12/31 Javascript
Hadoop中的Python框架的使用指南
2015/04/22 Python
Python实现把json格式转换成文本或sql文件
2015/07/10 Python
python多线程案例之多任务copy文件完整实例
2019/10/29 Python
解决python ThreadPoolExecutor 线程池中的异常捕获问题
2020/04/08 Python
Python爬虫实现vip电影下载的示例代码
2020/04/20 Python
Python3.7将普通图片(png)转换为SVG图片格式(网站logo图标)动起来
2020/04/21 Python
Python实现播放和录制声音的功能
2020/08/12 Python
python实现控制台输出颜色
2021/03/02 Python
Html5 webview元素定位工具的实现
2020/08/07 HTML / CSS
会计自我鉴定范文
2013/10/06 职场文书
银行门卫岗位职责
2013/12/29 职场文书
开学季活动策划方案
2014/02/28 职场文书
践行党的群众路线心得体会
2014/11/05 职场文书
2014年企业团支部工作总结
2014/12/10 职场文书
工程竣工验收申请报告
2015/05/15 职场文书
如何在python中实现ECDSA你知道吗
2021/11/23 Python