Ionic2系列之使用DeepLinker实现指定页面URL

 更新时间:2016年11月21日 17:16:19   作者:yan_xiaodi  
这篇文章主要介绍了Ionic2系列之使用DeepLinker实现指定页面URL的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下

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正则表达式的贪婪匹配和非贪婪匹配

    所谓贪婪匹配就是匹配重复字符是尽可能多的匹配,非贪婪匹配就是尽可能少的匹配,下面通过一个例子给大家分享JavaScript正则表达式的贪婪匹配和非贪婪匹配,感兴趣的朋友参考下吧
    2017-09-09
  • 上传文件返回的json数据会被提示下载问题解决方案

    上传文件返回的json数据会被提示下载问题解决方案

    这篇文章主要介绍了项目中python+js实现的上传文件返回的json数据会被提示下载问题解决方案,需要的朋友可以参考下
    2014-12-12
  • JavaScript之scrollTop、scrollHeight、offsetTop、offsetHeight等属性学习笔记

    JavaScript之scrollTop、scrollHeight、offsetTop、offsetHeight等属性学

    这篇文章主要介绍了JavaScript之scrollTop、scrollHeight、offsetTop、offsetHeight等属性学习笔记,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-07-07
  • 原生js实现点击轮播切换图片

    原生js实现点击轮播切换图片

    这篇文章主要为大家详细介绍了原生js点击轮播切换图片,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-02-02
  • 原生JavaScript实现弹幕组件的示例代码

    原生JavaScript实现弹幕组件的示例代码

    这篇文章主要介绍了原生JavaScript实现弹幕组件的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-10-10
  • 使用ethers.js部署Solidity智能合约的方法

    使用ethers.js部署Solidity智能合约的方法

    Ethers.js则是一个轻量级的web3.js替代品,在本文中,我们将学习使用ethers.js部署Solidity智能合约的方法,感兴趣的朋友一起看看吧
    2021-10-10
  • 详解ES6之async+await 同步/异步方案

    详解ES6之async+await 同步/异步方案

    这篇文章主要介绍了详解ES6之async+await 同步/异步方案,本文以最简明的方式来疏通 async + await,有兴趣的可以了解下
    2017-09-09
  • js判断浏览器版本以及浏览器内核的方法

    js判断浏览器版本以及浏览器内核的方法

    这篇文章主要介绍了js判断浏览器版本以及浏览器内核的方法,可实现针对各个浏览器的判断,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-01-01
  • 怎样用Javascript实现策略模式

    怎样用Javascript实现策略模式

    这篇文章主要介绍了JavaScript设计模式之策略模式,想学习设计模式的同学,一定要看一下
    2021-04-04
  • js实现仿百度瀑布流的方法

    js实现仿百度瀑布流的方法

    这篇文章主要介绍了js实现仿百度瀑布流的方法,以完整实例形式分析了js仿百度瀑布流的相关样式与实现技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-02-02

最新评论