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 string 转 int 注意的问题小结
Aug 15 Javascript
HTTP 304错误的详细讲解
Nov 13 Javascript
JavaScript的History API使搜索引擎抓取AJAX内容
Dec 07 Javascript
浅谈js中的引用和复制(传值和传址)
Sep 18 Javascript
JavaScript中关键字 in 的使用方法详解
Oct 17 Javascript
Angular1.x自定义指令实例详解
Mar 01 Javascript
JS实现身份证输入框的输入效果
Aug 21 Javascript
JQ图片文件上传之前预览功能的简单实例(分享)
Nov 12 Javascript
详解webpack-dev-server使用http-proxy解决跨域问题
Jan 13 Javascript
微信小程序实现文字从右向左无限滚动
Nov 18 Javascript
layui 实现表格某一列显示图标
Sep 19 Javascript
vue中使用vue-print.js实现多页打印
Mar 05 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
2019年漫画销量排行榜:鬼灭登顶 海贼单卷制霸 尾田盛赞鬼灭
2020/03/08 日漫
全国FM电台频率大全 - 21 海南省
2020/03/11 无线电
PHP下几种删除目录的方法总结
2007/08/19 PHP
php 特殊字符处理函数
2008/09/05 PHP
php跨站攻击实例分析
2014/10/28 PHP
php将access数据库转换到mysql数据库的方法
2014/12/24 PHP
PHP常用的类封装小结【4个工具类】
2019/06/28 PHP
浅谈PHP之ThinkPHP框架使用详解
2020/07/21 PHP
PHP中的异常处理机制深入讲解
2020/11/10 PHP
js获取图片长和宽度的代码
2009/11/24 Javascript
jQuery之过滤元素操作小结
2013/11/30 Javascript
利用javascript打开模态对话框(示例代码)
2014/01/11 Javascript
javascript动态创建及删除元素的方法
2014/12/22 Javascript
原生js实现日期联动
2015/01/12 Javascript
jQuery多个input求和的实现方法
2015/02/12 Javascript
jQuery fancybox在ie浏览器下无法显示关闭按钮的解决办法
2016/02/19 Javascript
Javascript中引用类型传递的知识点小结
2017/03/06 Javascript
[14:36]2014 DOTA2国际邀请赛中国区预选赛5.21 Orenda VS NE
2014/05/22 DOTA
[01:04:14]VP vs TNC 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/20 DOTA
[59:53]DOTA2-DPC中国联赛 正赛 VG vs Elephant BO3 第二场 3月6日
2021/03/11 DOTA
Python创建普通菜单示例【基于win32ui模块】
2018/05/09 Python
Python任意字符串转16, 32, 64进制的方法
2019/06/12 Python
python做反被爬保护的方法
2019/07/01 Python
对python中不同模块(函数、类、变量)的调用详解
2019/07/16 Python
Django中ajax发送post请求 报403错误CSRF验证失败解决方案
2019/08/13 Python
Python 脚本的三种执行方式小结
2019/12/21 Python
python GUI库图形界面开发之PyQt5窗口背景与不规则窗口实例
2020/02/25 Python
基于python实现检索标记敏感词并输出
2020/05/07 Python
python 删除excel表格重复行,数据预处理操作
2020/07/06 Python
英国知名化妆品网站:Revolution Beauty(原TAM Beauty)
2018/02/28 全球购物
SNIDEL官网:日本VIVI杂志人气少女第一品牌
2020/03/12 全球购物
六年级学生期末评语
2014/12/26 职场文书
2015年幼儿园班主任个人工作总结
2015/10/22 职场文书
2016十一国庆节慰问信
2015/12/01 职场文书
告诉你一个秘密:富人致富的五大优点
2019/07/11 职场文书
Win11安全功能升级:内置防网络钓鱼功能
2022/04/08 数码科技