Home > Web Front-end > JS Tutorial > body text

Angular learning talks about component communication and component life cycle

青灯夜游
Release: 2022-06-09 20:21:30
forward
1936 people have browsed it

This article will take you to understand the component communication and component life cycle in angular, and briefly introduce the method of transferring data to the inside of the component and the method of transferring data to the outside. I hope it will be helpful to everyone!

Angular learning talks about component communication and component life cycle

Component communication


1. Pass data inside the component

<app-favorite [isFavorite]="true"></app-favorite>
Copy after login
// favorite.component.ts
import { Input } from &#39;@angular/core&#39;;
export class FavoriteComponent {
    @Input() isFavorite: boolean = false;
}
Copy after login

[Related tutorial recommendation: "angular tutorial"]

Note: Add [] outside the attribute to indicate binding a dynamic value , after being received in the component, it is a Boolean type. Without [], it means binding a normal value. After being received in the component, it is a string type.

<app-favorite [is-Favorite]="true"></app-favorite>
Copy after login
import { Input } from &#39;@angular/core&#39;;

export class FavoriteComponent {
  @Input("is-Favorite") isFavorite: boolean = false
}
Copy after login

2. Component transfers data to the outside

Requirement: Pass data to the parent component by clicking the button in the child component

<!-- 子组件模板 -->
<button (click)="onClick()">click</button>
Copy after login
// 子组件类
import { EventEmitter, Output } from "@angular/core"

export class FavoriteComponent {
  @Output() change = new EventEmitter()
  onClick() {
    this.change.emit({ name: "张三" })
  }
}
Copy after login
<!-- 父组件模板 -->
<app-favorite (change)="onChange($event)"></app-favorite>
Copy after login
// 父组件类
export class AppComponent {
  onChange(event: { name: string }) {
    console.log(event)
  }
}
Copy after login

Component life cycle


Angular learning talks about component communication and component life cycle

#1. Mounting phase

The life cycle function of the mount phase is only executed once during the mount phase and is no longer executed when the data is updated.

1), constructor

Angular is executed when instantiating the component class, and can be used to receive the service instance object injected by Angular.

export class ChildComponent {
  constructor (private test: TestService) {
    console.log(this.test) // "test"
  }
}
Copy after login

2), ngOnInit

is executed after receiving the input attribute value for the first time, where the requested operation can be performed.

<app-child name="张三"></app-child>
Copy after login
export class ChildComponent implements OnInit {
  @Input("name") name: string = ""
  ngOnInit() {
    console.log(this.name) // "张三"
  }
}
Copy after login

3), ngAfterContentInit

Called after the initial rendering of the content projection is completed.

<app-child>
	<div #box>Hello Angular</div>
</app-child>
Copy after login
export class ChildComponent implements AfterContentInit {
  @ContentChild("box") box: ElementRef<HTMLDivElement> | undefined

  ngAfterContentInit() {
    console.log(this.box) // <div>Hello Angular</div>
  }
}
Copy after login

4), ngAfterViewInit

Called when the component view is rendered.

<!-- app-child 组件模板 -->
<p #p>app-child works</p>
Copy after login
export class ChildComponent implements AfterViewInit {
  @ViewChild("p") p: ElementRef<HTMLParagraphElement> | undefined
  ngAfterViewInit () {
    console.log(this.p) // <p>app-child works</p>
  }
}
Copy after login

2, update phase

1), ngOnChanges

  • occurs when the input attribute value occurs It is executed when it changes, and it will also be executed once during initial setting. The order is better than ngOnInit

  • No matter how many input attributes change at the same time, the hook function will only be executed once, and the changed values ​​​​will be stored in the parameters at the same time.

  • The parameter type is SimpleChanges and the sub-property type is SimpleChange

  • For basic data types, as long as the value changes, it can be detected To

  • For reference data types, it is possible to detect changes from one object to another, but changes in attribute values ​​in the same object cannot be detected, but it does not affect component template updates. data.

Basic data type value changes

<app-child [name]="name" [age]="age"></app-child>
<button (click)="change()">change</button>
Copy after login
export class AppComponent {
  name: string = "张三";
  age: number = 20
  change() {
    this.name = "李四"
    this.age = 30
  }
}
Copy after login
export class ChildComponent implements OnChanges {
  @Input("name") name: string = ""
  @Input("age") age: number = 0

  ngOnChanges(changes: SimpleChanges) {
    console.log("基本数据类型值变化可以被检测到")
  }
}
Copy after login

Reference data type changes

<app-child [person]="person"></app-child>
<button (click)="change()">change</button>
Copy after login
export class AppComponent {
  person = { name: "张三", age: 20 }
  change() {
    this.person = { name: "李四", age: 30 }
  }
}
Copy after login
export class ChildComponent implements OnChanges {
  @Input("person") person = { name: "", age: 0 }

  ngOnChanges(changes: SimpleChanges) {
    console.log("对于引用数据类型, 只能检测到引用地址发生变化, 对象属性变化不能被检测到")
  }
}
Copy after login

2), ngDoCheck: Mainly used for debugging. As long as the input attributes change, whether it is a basic data type, a reference data type or an attribute change in a reference data type, it will be executed.

3), ngAfterContentChecked: Executed after the content projection update is completed.

4), ngAfterViewChecked: Executed after the component view is updated.

3. Uninstallation phase

1), ngOnDestroy

is called before the component is destroyed, used for cleanup operations.

export class HomeComponent implements OnDestroy {
  ngOnDestroy() {
    console.log("组件被卸载")
  }
}
Copy after login
For more programming-related knowledge, please visit:

Programming Video! !

The above is the detailed content of Angular learning talks about component communication and component life cycle. For more information, please follow other related articles on the PHP Chinese website!

Related labels:
source:csdn.net
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template