组件通讯,意在不同的指令和组件之间共享信息。
父->子 input
| 1 | // parent.html | 
子->父 output
| 1 | // parent.html | 
子获取父实例
| 1 | // child.ts | 
父获取子实例
| 1 | @ViewChild(ChildPage) child:ChildPage; | 
service 公共的
| 1 | // parent.ts | 
记得在app.module.ts 加上providers
EventEmitter(eventbus)
| 1 | // eventbus.service.ts | 
订阅
| 1 | // service | 
以上七种组件与组件的通讯方式,可以选择应用于适合的场景。
顺带介绍下重载当前路由,在Angular中,当点击当前路由的链接时,默认是忽略的。
糟糕的解决方案
- 跳出去,再跳回来。
- 让浏览器刷新整个页面。
然而目前我们可以通过 onSameUrlNavigation来解决这个问题。
onSameUrlNavigation 有两个值’reload’和’ignore’。默认为’ignore’。
- 定义当路由器收到一个导航到当前 URL 的请求时应该怎么做。 默认情况下,路由器将会忽略这次导航。但这样会阻止类似于 “刷新” 按钮的特性。 使用该选项可以配置导航到当前 URL 时的行为。 
- 路由启动配置 - 1 
 2- // app.routing.module.ts 
 imports: [RouterModule.forRoot(routes, {onSameUrlNavigation: 'reload'})]- reload并不会真正的执行加载工作,它只是重新触发了路由上的events事件循环。也可以动态配置reload- 1 
 2
 3
 4- this.router.onSameUrlNavigation = 'reload'; 
 this.router.navigateByUrl(this.router.url).then(() => {
 this.router.onSameUrlNavigation = 'ignore';
 });
- Route配置 一系列的路由事件在何种情况下应该被触发,此时我们需要配置 runGuardsAndResolvers 选项,它有3个可选值。 
- paramsChange 只有当参数变化时才重新启动,例如 ‘article/:id’,参数指的就是这里的id。 
- paramsOrQueryParamsChange 当参数或查询参数变化时重新启动。例如:’article/:category?limit=10,参数指 ‘category’,查询参数指’limit’; 
- always 无论何种情况都重新启动 
| 1 | export const routes: Routes = [ | 
- 组件中处理路由事件1 
 2
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12export 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(); // 不要忘记处理手动订阅
 }
 }
 
        