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 相关文章推荐
js打印纸函数代码(递归)
Jun 18 Javascript
JavaScript日期时间与时间戳的转换函数分享
Jan 31 Javascript
JS中prototype的用法实例分析
Mar 19 Javascript
js带缩略图的图片轮播效果代码分享
Sep 14 Javascript
jQuery密码强度检测插件passwordStrength用法实例分析
Oct 30 Javascript
JavaScript实现同时调用多个函数的方法
Nov 09 Javascript
javaScript实现滚动条事件详解
Mar 24 Javascript
详解基于Vue+Koa的pm2配置
Oct 24 Javascript
基于vue 动态加载图片src的解决方法
Feb 05 Javascript
非常实用的jQuery代码段集锦【检测浏览器、滚动、复制、淡入淡出等】
Aug 08 jQuery
BootStrap表单验证中的非Submit类型按钮点击时触发验证的坑
Sep 05 Javascript
Vue组件通信入门之Provide和Inject机制
Dec 29 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的AES加密算法完整实例
2016/07/20 PHP
php readfile下载大文件失败的解决方法
2017/05/22 PHP
PHP安全之register_globals的on和off的区别
2020/07/23 PHP
Javascript this指针
2009/07/30 Javascript
[原创]js获取数组任意个不重复的随机数组元素
2010/03/15 Javascript
超级24小时弹窗代码 24小时退出弹窗代码 100%弹窗代码(IE only)
2010/06/11 Javascript
Jquery刷新页面背景图片随机变换的实现方法
2013/03/15 Javascript
jQuery插件Tmpl的简单使用方法
2015/04/27 Javascript
基于jquery fly插件实现加入购物车抛物线动画效果
2016/04/05 Javascript
js操作数据库实现注册和登陆的简单实例
2016/05/26 Javascript
AngularJS+bootstrap实现动态选择商品功能示例
2017/05/17 Javascript
vue实现全选、反选功能
2020/11/17 Javascript
详解升级react-router 4 踩坑指南
2017/08/14 Javascript
Vue侧滑菜单组件——DrawerLayout
2017/12/18 Javascript
微信小程序上线发布流程图文详解
2019/05/06 Javascript
node解析修改nginx配置文件操作实例分析
2019/11/06 Javascript
[01:35]辉夜杯战队访谈宣传片—iG.V
2015/12/25 DOTA
Python里隐藏的“禅”
2014/06/16 Python
Python中的类与对象之描述符详解
2015/03/27 Python
python制作websocket服务器实例分享
2016/11/20 Python
Python调用C++程序的方法详解
2017/01/24 Python
python中安装Scrapy模块依赖包汇总
2017/07/02 Python
Python3实现爬取简书首页文章标题和文章链接的方法【测试可用】
2018/12/11 Python
python tkinter之顶层菜单、弹出菜单实例
2020/03/04 Python
python实现遍历文件夹图片并重命名
2020/03/23 Python
利用纯CSS3实现tab选项卡切换示例代码
2016/09/21 HTML / CSS
html5教程画矩形代码分享
2013/12/04 HTML / CSS
美国生日蛋糕店:Bake Me A Wish!
2017/02/08 全球购物
巴西24小时在线药房:Droga Raia
2020/05/12 全球购物
函授大专自我鉴定
2013/11/01 职场文书
学校花圃的标语
2014/06/18 职场文书
会计专业自荐书
2014/07/08 职场文书
个人纪律作风整改措施思想汇报
2014/10/12 职场文书
关于感谢信的范文
2015/01/23 职场文书
玄武湖导游词
2015/02/05 职场文书
实习感想范文
2015/08/10 职场文书