【发布时间】:2020-01-09 03:29:03
【问题描述】:
为什么即使child_message 的值发生变化,ngOnChanges 也不会被触发?我看到当值从父级传递给子级时,ngDocheck() 被触发。但是它会被触发多次,不仅是在传递值时,而且在初始化组件时也是如此。我想要在初始化后更改值时触发的东西。
ParentComponent.ts:
import { Component, OnInit,ViewChild,AfterViewInit, OnChanges, Input } from '@angular/core';
import { ChildComponent } from '../child/child.component';
@Component({
selector: 'app-parent',
templateUrl: './parent.component.html',
styleUrls: ['./parent.component.css']
})
export class ParentComponent implements OnInit,OnChanges{
parent_message = "parent talking";
@Input() clicked:boolean =false;
constructor() { }
ngOnInit(){
//subscribing to message !!
//this.data.currentMesssage.subscribe(message => this.message =message)
}
ngOnChanges(){
console.log("change occured")
}
onClick(){
this.clicked = true;
}
}
ParentComponent.html:
<h1>Parent </h1>
Message:{{message}}
<button (click)='onClick()'>Send Message</button>
<div *ngIf="clicked; else notclicked">
<app-child [childMessage]="parent_message"> </app-child>
</div>
<ng-template #notclicked>
<app-child> </app-child>
</ng-template>
ChildComponent.ts:
import { Component, OnInit ,Input, Output,EventEmitter,OnChanges,DoCheck} from '@angular/core';
@Component({
selector: 'app-child',
templateUrl: './child.component.html',
styleUrls: ['./child.component.css'],
})
export class ChildComponent implements OnChanges, DoCheck{
@Input() childMessage: string ="child here ";
//@Output()messageEvent = new EventEmitter<string>();
constructor() { }
ngOnChanges(){
console.log("change occured");
}
ngDoCheck(){
console.log("ngDoCheck");
}
}
ChildComponent.html:
<h1>Child</h1>
Say:{{childMessage}}
【问题讨论】:
-
如果我没记错的话,如果值被改变而不是每次都会触发 ngOnchanges。
标签: angular