>  기사  >  웹 프론트엔드  >  각도 학습에서는 구성 요소 통신 및 구성 요소 수명 주기에 대해 설명합니다.

각도 학습에서는 구성 요소 통신 및 구성 요소 수명 주기에 대해 설명합니다.

青灯夜游
青灯夜游앞으로
2022-05-18 10:52:271935검색

이 글에서는 angular의 컴포넌트 통신과 컴포넌트 라이프사이클을 이해하고, 컴포넌트 내부로 데이터를 전송하는 방법과 외부로 데이터를 전송하는 방법을 간략하게 소개하는 것이 도움이 되기를 바랍니다. 모두에게!

각도 학습에서는 구성 요소 통신 및 구성 요소 수명 주기에 대해 설명합니다.

컴포넌트 통신


1. 데이터를 컴포넌트 내부로 전달

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

[권장 관련 튜토리얼: "angular 튜토리얼"]

참고: 외부에 [] 表示绑定动态值,在组件内接收后是布尔类型,不加 [] 表示绑定普通值,在组件内接收后是字符串类型 추가 속성 .

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

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

2. 구성 요소가 데이터를 외부로 전송합니다.

요구 사항: 하위 구성 요소의 버튼을 클릭하여 상위 구성 요소로 데이터를 전달합니다.

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

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

구성 요소 수명 주기


각도 학습에서는 구성 요소 통신 및 구성 요소 수명 주기에 대해 설명합니다.

1. 마운팅 단계

마운팅 단계의 수명 주기 기능은 마운팅 단계 중 한 번만 실행되며 데이터가 업데이트되면 더 이상 실행되지 않습니다.

1) constructor

Angular는 컴포넌트 클래스를 인스턴스화할 때 실행되며, Angular가 주입한 서비스 인스턴스 객체를 전달받는 데 사용할 수 있습니다.

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

2), ngOnInit

은 처음으로 입력 속성값을 받은 후 실행되며, 여기서 요청 작업을 수행할 수 있습니다.

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

3), ngAfterContentInit

은 콘텐츠 프로젝션의 초기 렌더링이 완료되면 호출됩니다.

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

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

4), ngAfterViewInit

구성요소 뷰가 렌더링될 때 호출됩니다.

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

2, 업데이트 단계

1), ngOnChanges

  • 는 입력 속성 값이 변경될 때 실행되며, 초기 설정 시에도 한 번 실행됩니다. 순서는 ngOnInit

  • 동시에 입력 속성을 몇 개나 변경해도 Hook 함수는 한 번만 실행되며, 변경된 값은 동시에 파라미터에 저장됩니다

  • 파라미터 유형은 SimpleChanges이고, 하위 속성은 유형은 SimpleChange

  • 기본 데이터 유형의 경우 값이 변경되는 한 감지됨

  • 참조 데이터 유형의 경우 한 객체에서 다른 객체로의 변경을 감지할 수 있지만 동일한 객체의 속성 값 변경 감지할 수는 없지만 구성 요소 템플릿 업데이트 데이터에는 영향을 미치지 않습니다.

기본 데이터 유형 값 변경

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

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

참조 데이터 유형 변경

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

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

2), ngDoCheck : 기본 데이터 유형이든, 입력 속성이 변경되는 한 디버깅에 주로 사용됩니다. 참조 데이터 유형 또는 참조 데이터 유형의 모든 속성 변경이 실행됩니다.

3), ngAfterContentChecked: 콘텐츠 프로젝션 업데이트가 완료된 후 실행됩니다.

4), ngAfterViewChecked: 컴포넌트 뷰가 업데이트된 후 실행됩니다.

3. 언로드 단계

1), ngOnDestroy

는 구성 요소가 삭제되기 전에 호출되어 정리 작업에 사용됩니다.

export class HomeComponent implements OnDestroy {
  ngOnDestroy() {
    console.log("组件被卸载")
  }
}

더 많은 프로그래밍 관련 지식을 보려면 프로그래밍 비디오를 방문하세요! !

위 내용은 각도 학습에서는 구성 요소 통신 및 구성 요소 수명 주기에 대해 설명합니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 csdn.net에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제