Angular 6 ngOninit未调用从子级到父级

时间:2018-09-04 02:02:00

标签: angular angular6

请考虑以下设置:

{ path: 'module1', component: Module1Component, children: [
    { path: 'component1', component: Component1Component, children: [
        { path: 'component2', component: Component2Component }
    ] }
] },

因此,基于以上内容:

  • / module1 加载 Module1Component
  • / module1 / component1 加载 Component1Component
  • / module1 / component1 / component2 加载 Component2Component

  • Module1Component Component1Component
  • 的父级
  • Component1Component Component2Component
  • 的父级

Module1组件代码

import { Component, OnInit } from "@angular/core";

@Component({
    selector: 'app-module1-component',
    templateUrl: './module1.component.html',
    styleUrls: ['./module1.component.css']
})
export class Module1Component implements OnInit {

    constructor() {}

    ngOnInit() {
        console.log('Module1Component');
    }
}

Component1组件代码

import { Component, OnInit } from '@angular/core';

@Component({
    selector: 'app-component1',
    templateUrl: './component1.component.html',
    styleUrls: ['./component1.component.css']
})
export class Component1Component implements OnInit {

    constructor() { }

    ngOnInit() {
        console.log('Component1Component');
    }

}

Component2组件代码

import { Component, OnInit } from '@angular/core';

@Component({
    selector: 'app-component2',
    templateUrl: './component2.component.html',
    styleUrls: ['./component2.component.css']
})
export class Component2Component implements OnInit {

    constructor() { }

    ngOnInit() {
        console.log('Component2Component');
    }

}

问题

给出以下链接:

<a [routerLink]="['/module1']">/module1</a>
<a [routerLink]="['/module1/component1']">/module1/component1</a>
<a [routerLink]="['/module1/component1/component2']">/module1/component1/component2</a>
  • 使用 / module1 / component1 / component2 时,使用Component1Component ngOnInit上方的routerLink转到 / module1 / component1 / 不被称为

  • / module1 / component1 上并使用未调用Module1Component的 ngOnInit上方的routerLink转到 / module1 >。

结论:不会调用使用routerLink从孩子到父母的ngOnInit,为什么要配置它以及为什么要这样做?

注意:使用 router.navigate 或使用浏览器中的后退按钮时,也会发生相同的行为。

1 个答案:

答案 0 :(得分:0)

在导航到具有不同参数的相同组件时,不会调用ngOnInit的预期行为。

但是您不应该手动调用ngOnInit。

每次路由参数更改时,都会通知订阅。因此,subscribe方法中的代码将每次执行。您无需调用ngOnInit。

通过在route.params.subscribe中移动console.log来尝试。