<app-favorite [isFavorite]="true"></app-favorite>
// favorite.comComponent.ts
구성 요소에 데이터를 전달합니다.
'@angular/core'에서 { 입력 }을 가져옵니다. 내보내기 클래스 FavoriteComponent { @Input() isFavorite: 부울 = false; }
[관련 튜토리얼 권장 사항: "angular tutorial"]
참고: 속성 외부에 []
추가하는 것은 동적 값을 바인딩하는 것을 의미하며, []
추가하지 않으면 일반 값을 바인딩하는 것을 의미합니다. 구성 요소에서는字符串类型
입니다.
<app-favorite [is-Favorite]="true"></app-favorite>
import { 입력 } from '@angular/core'; 내보내기 클래스 FavoriteComponent { @Input("is-Favorite") isFavorite: 부울 = false }
2. 컴포넌트가
데이터를 외부로 전송해야 합니다. 하위 컴포넌트
<!-- Sub-composite template-->에서 버튼을 클릭하여 상위 컴포넌트에 데이터를 전달합니다.
<button (click)="onClick()">click</button>
// 하위 구성 요소 클래스 import { EventEmitter, Output } from "@angular/core" 내보내기 클래스 FavoriteComponent { @Output() 변경 = 새 EventEmitter() 온클릭() { this.change.emit({ 이름: "장산" }) } }
<!-- 상위 구성요소 템플릿 --> <app-favorite (change)="onChange($event)"></app-favorite>
// 상위 구성 요소 클래스 내보내기 클래스 AppComponent { onChange(이벤트: { 이름: 문자열 }) { console.log(이벤트) } }
1. 마운팅 단계
마운팅 단계의 수명주기 기능은 마운팅 단계 중 한 번만 실행되며 데이터가 업데이트되면 더 이상 실행되지 않습니다.
1) 생성자
Angular는 구성 요소 클래스를 인스턴스화할 때 실행되며 Angular에 의해 주입된 서비스 인스턴스 개체를 받는 데 사용할 수 있습니다.
내보내기 클래스 ChildComponent { 생성자(비공개 테스트: TestService) { console.log(this.test) // "테스트" } }
2)
처음으로 입력 속성 값을 받은 후 ngOnInit이 실행되며, 여기서 요청한 작업을 수행할 수 있습니다.
<app-child name="Zhang San"></app-child>
내보내기 클래스 ChildComponent는 OnInit {를 구현합니다. @Input("name") 이름: 문자열 = "" ngOnInit() { console.log(this.name) // "장산" } }
3) ngAfterContentInit는
콘텐츠 프로젝션의 초기 렌더링이 완료된 후 호출됩니다.
<앱-자식> <div #box>안녕하세요 Angular</div> </app-child>
내보내기 클래스 ChildComponent는 AfterContentInit을 구현합니다. @ContentChild("box") 상자: ElementRef<HTMLDivElement> | ngAfterContentInit() { console.log(this.box) // <div>Hello Angular</div> } }
4) ngAfterViewInit은
컴포넌트 뷰가 렌더링된 후에 호출됩니다.
<!-- 앱-하위 구성요소 템플릿 --> <p #p>app-child 작동</p>
내보내기 클래스 ChildComponent가 AfterViewInit을 구현합니다. @ViewChild("p") p: ElementRef<HTMLParagraphElement> | 정의되지 않음 ngAfterViewInit() { console.log(this.p) // <p>app-child 작동</p> } }
2. 업데이트 단계
1), ngOnChanges는
입력 속성 값이 변경될 때 실행되며, 초기 설정 시에도 한 번 실행됩니다.
동시에 입력 속성이 몇 개 변경되더라도 Hook 기능은
한 번만 실행되며, 변경된 값은 동시에 저장됩니다. 매개변수에서
매개
변수 유형은 SimpleChanges이고 하위 속성 유형은 SimpleChange입니다.
값 변경
참조 데이터 유형의 경우 한 객체에서 다른 객체로의 변경을 감지할 수 있지만 동일한 객체의 속성 값 변경은 구성 요소 템플릿 업데이트 데이터에 영향을 미치지 않습니다.
기본 데이터 유형 값 변경
<app-child [name]="name" [age]="age"></app-child> <button (click)="change()">변경</button>
내보내기 클래스 AppComponent { 이름: 문자열 = "장산"; 나이: 숫자 = 20 변화() { this.name = "이思" this.age = 30 } }
내보내기 클래스 ChildComponent가 OnChanges를 구현합니다. @Input("name") 이름: 문자열 = "" @Input("age") 연령: 숫자 = 0 ngOnChanges(변경사항: SimpleChanges) { console.log("기본 데이터형 값의 변화를 감지할 수 있습니다.") } }
참조 데이터 유형 변경
<app-child [person]="person"></app-child> <button (click)="change()">변경</button>
내보내기 클래스 AppComponent { 사람 = { 이름: "张三", 나이: 20 } 변화() { this.person = { 이름: "이思", 나이: 30 } } }
내보내기 클래스 ChildComponent가 OnChanges를 구현합니다. @Input("person") 사람 = { 이름: "", 나이: 0 } ngOnChanges(변경사항: SimpleChanges) { console.log("참조 데이터 유형의 경우 참조 주소의 변경만 감지할 수 있으며 객체 속성의 변경은 감지할 수 없습니다.") } }
2), ngDoCheck: 주로 디버깅에 사용되며 기본 데이터 유형이든 참조 데이터 유형이든 참조 데이터 유형의 속성 변경이든 입력 속성이 변경되는 한 실행됩니다.
3), ngAfterContentChecked: 콘텐츠 프로젝션 업데이트가 완료된 후 실행됩니다.
4), ngAfterViewChecked: 컴포넌트 뷰가 업데이트된 후 실행됩니다.
3. 제거 단계
1), ngOnDestroy는
구성 요소가 제거되기 전에 호출되어 정리 작업에 사용됩니다.
내보내기 클래스 HomeComponent는 OnDestroy를 구현합니다. ngOnDestroy() { console.log("구성요소가 제거되었습니다.") } }