之前有同学在群里问到过,为什么url已经变化了,但是页面却没有刷新,这个问题一般都会涉及到路由重载。这在angularJs里实现起来是比较直接的,只需要调用路由服务的reload方法就可以了。 但是在angular里可能没有那么直接。

糟糕的解决方案

  1. 跳出去,再跳回来。为了重载A页面,这种解决方式采用 A --> B --> A的方式使A页面重新加载。'hack'的味道非常浓重。
  2. 让浏览器刷新整个页面。这对于单页应用来讲实在是非常糟糕的方法,因为它会重新加载应用,如果应用比较大,加载时间过长,用户体验极差。

angular Style的解决方案

其实在angular5.1版本中就可以通过onSameUrlNavigation解决这个问题,不幸的是官方的文档中并没有清楚的提到这个配置以及如何使用。下面我们来看下如何配置它。

路由启动配置

首先需要在项目的根路由,一般是app.routing.ts 或 app.routing.module.ts中,当然这得看你的项目是如何命名根路由的。onSameUrlNavigation的配置有2个可选值,'ignore' 和 'reload'。默认ignore,当路由请求被要求导航到当前的活动路由中时页面是不会reload的,因此不会发生任何改变的。我们希望的是reload,因此需要手动配置它的值为'reload';

const routes: Route[] = [...];
@ngModule({imports: [RouterModule.forRoot(routes, {onSameUrlNavigation: ‘reload’})],exports: [RouterModule],
})
export class AppRoutingModule.ts { }

值得注意的是,'reload'并不会真正的执行加载工作,它只是重新触发了路由上的events事件循环。

Route配置

接下来要解决的是,这一系列的路由事件在何种情况下应该被触发,此时我们需要配置 runGuardsAndResolvers 选项,它有3个可选值。

  • paramsChange 只有当参数变化时才重新启动,例如 'article/:id',参数指的就是这里的id。
  • paramsOrQueryParamsChange 当参数或查询参数变化时重新启动。例如:'article/:category?limit=10,参数指 'category',查询参数指'limit';
  • always 无论何种情况都重新启动

这里我们使用 'paramsChange'

export const routes: Routes = [{path: 'article/:id',component: ArticleComponent,runGuardsAndResolvers: 'paramsChange',}
]

组件中处理路由事件

路由上的配置完成后,我们需要在组件中处理路由上的事件,在特定的事件到达时执行需要的操作,如从后台加载数据等,路由上的事件很多,'特定事件'指的是你希望处理的事件。这里我们选择NavigationEnd事件

export class ArticleComponent implement OnInit, OnDestroy {subscription: Subscription;constructor(private router: Router) { }ngOnInit() {this.subscription = this.router.events.pipe(filter(event => event instanceOf NavigationEnd)).subscribe(_ => {...}) // 执行业务操作}ngOnDestroy() {this.subscription.unsubscribe(); // 不要忘记处理手动订阅}
}

OK,到这里所有的工作就结束了,假如路由处于 'article/2',业务逻辑需要在这里重新定位到 'article/3' 时,这下就不仅仅是url发生变化了,页面也会随之被更新。

Angular完全开发手册​www.hijavascript.com

路由怎么定位到当前页面的组件_Angular 重载当前路由相关推荐

  1. vue中使用类似html中a标签的锚链接,实现点击定位到当前页面的某个位置

    在vue中实现点击文字,定位到当前页面的某个位置,具体实现效果如下图所示: 主要实现方式为: <div @click="toJump1">定位1</div> ...

  2. angular复用路由组件_Angular Router的组件路由简介

    angular复用路由组件 这是SitePoint Angular 2+教程的第4部分,有关如何使用Angular CLI创建CRUD应用程序. 在本文中,我们将介绍Angular Router,并了 ...

  3. vue项目刷新当前页面的三种方法

    本文介绍了vue项目刷新当前页面的三种方法,本文图文并茂给大家介绍的非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下. 想必大家在刨坑vue的时候也遇到过下面情形:比如在删除或者增加一条记录的时 ...

  4. Vue项目实战02 : vue项目刷新当前页面的三种方法

    想必大家在刨坑vue的时候也遇到过下面情形:比如在删除或者增加一条记录的时候希望当前页面可以重新刷新或者如下面这种: 这时候我们最直接的思维就是想到下面这种: 但是,试过的会发现用vue-router ...

  5. vue的html自动刷新,vue项目刷新当前页面的方法

    想必大家在刨坑vue的时候也遇到过下面情形:比如在删除或者增加一条记录的时候希望当前页面可以重新刷新或者如下面这种: 如果希望点击确定的时候,Dialog 对话框关闭的时候,当前http://loca ...

  6. Vue项目中刷新当前页面的四种方法

    Vue项目中刷新当前页面的四种方法 前记 刷新当前页面的四种方法 this.$router.go(0) location.reload() 跳转空白页再跳回原页面 使用provide / inject ...

  7. Flutter由其他页面回到当前页面时监听并刷新当前页面的内容

    项目中经常遇到这样的场景,比如很多App都有的收藏.点赞列表等,当我们从收藏列表点击一个item项进入到详情页时,用户点击了取消收藏,那么当我们点击返回到收藏列表页时,App需要主动刷新收藏列表的数据 ...

  8. 组件化思想+Vue路由_day09

    1.组件化思想 组件的出现,就是为了拆分Vue实例的代码量的,能够让我们以不同的组件,来划分不同的功能模块,将来我们需要什么样的功能,就可以去调用对应的组件就可以了 1.1组件化步骤 组件化步骤: 1 ...

  9. html超链接跳出脚本错误,Windows7打开网页弹出当前页面的脚本发生错误如何解决?...

    Windows系统发生脚本错误时常常伴随着黄色感叹号的弹框提示"当前页面的脚本发生错误",这种情况大多发生在打开浏览器浏览网页的时候,由于IE组件出现异常所致,所以用户在解决这个问 ...

最新文章

  1. Blender写实建筑场景制作学习教程 Exterior Visualization in Blender 2.9
  2. sscanf高级用法级正则表达式
  3. Colaboratory下载Kaggle数据
  4. Qt5.9使用QWebEngineView加载网页速度非常慢,问题解决
  5. 物联网有哪些技术 物联网跟云计算人工智能有什么关系
  6. OFD文件结构--Signatures.xml
  7. 学python有什么用-为什么要学Python?学了有什么用?
  8. Java之美[从菜鸟到高手演变]之JVM内存管理及垃圾回收
  9. 机器学习知识体系 (强烈推荐)
  10. spring cloud(一) 副 consul
  11. 下行文格式图片_通知的格式及范文图片_通知格式 通知的格式及范文
  12. Linux下安装神通数据库
  13. element click intercepted
  14. flask html 得到文本框 input的内容_你需要知道的HTML知识
  15. Tmux 常用快捷键
  16. ansys经典界面分析工字钢_工字钢_ANSYS实例分析72道(含结果)
  17. 分享一个自己做的一个3DM手机客户端
  18. 批量将一个 PPT 幻灯片文件按固定页数拆分成多个幻灯片文件
  19. svn提交怎么全选_SVN 一次性提交多个目录中文件
  20. 关于存储优化型实例和大型数据仓库EC2实例选型

热门文章

  1. mysql的内存表和临时表
  2. 谷歌Android系统在美成宠儿
  3. YonStore应用+摩天知识,用友树立云生态新标杆
  4. 部署yum仓库自动挂载服务
  5. Mahout的推荐系统
  6. 权限框架 - shiro 简单入门实例
  7. HTML DOM(一):认识DOM
  8. Midnight.js – 实现奇妙的固定头部切换效果
  9. 【Java】在Eclipse中使用JUnit4进行单元测试(初级篇)
  10. Google Map API使用详解(十)——使用JavaScript创建地图详解(上)