각도 학습은 수명주기에 대해 이야기합니다.
이 글은 여러분이 계속해서 Angle을 학습하는데 도움이 될 것입니다. 개발을 위해 Angle을 사용하게 되면, Angular의 라이프 사이클에 대해 이야기해 보도록 하겠습니다.
react
및 vue
개발에 노출된 독자라면 라이프사이클 개념에 익숙할 것입니다. angular
를 사용하여 개발할 때 피할 수 없는 일입니다. react
和 vue
开发的读者应该对生命周期这个概念不陌生。我们在使用 angular
开发的过程中,是避免不了的。
组件从开始建立到销毁的过程中,会经历过一系列的阶段。这就是一个生命周期,这些阶段对应着应用提供的 lifecycle hooks
。
那么,在 angular
中,这些 hooks
都有哪些呢?了解它们,对你编写程序应该在哪里编写,很重要。【相关教程推荐:《angular教程》】
angular
中,生命周期执行的顺序如下:
- constructor 【常用,不算钩子函数,但是很重要】 - ngOnChanges【常用】 - ngOnInit【常用】 - ngDoCheck - ngAfterContentInit - ngAfterContentChecked - ngAfterViewInit【常用】 - ngAfterViewChecked - ngOnDestroy【常用】
为了解说和验证,我们用 angular-cli
生成一个 demo
项目。
constructor
在 es6
中的 class
初始化对象的时候,constructor
会立即被调用。
class Person { constructor(name) { console.log('be called') this.name = name; } } let jimmy = new Person('jimmy'); // be called
angular
的组件本身就是导出一个类。当这个组件被 new
起来的时候,会获取 constructor
中的预设的值。
ngOnChanges
当我们有外部参数更改的时候,我们就会执行 ngOnChanges
,也就是说组件中有 @Input
所绑定的属性值发生改变的时候调用。
简单说,父组件绑定子组件中的元素,会触发这个钩子函数,可以多次出发。这在下面的 ngOnInit
总会介绍。
ngOnInit
这个方法调用的时候,说明组件已经初始化成功。在第一次 ngOnChanges()
完成之后调用,且只调用一次。
// app.component.ts export class AppComponent implements OnInit, OnChanges { constructor() { console.log('1. constructor') } ngOnChanges() { console.log('2. ngOnChanges') } ngOnInit() { console.log('3. ngOnInit') } }
打印的信息如下:
咦?怎么没有打印 ngOnChanges
中的钩子函数信息呢?
上面已经说过了,需要触发条件 @Input
的属性值改变的时候。我们来修改一下:
<!-- app.component.html --> <div> <app-demo></app-demo> </div>
// app.component.ts // AppComponent 类中添加属性 public count:number = 0;
<!-- demo.component.html --> <h3 id="count-nbsp-nbsp-count-nbsp">count: {{ count }}</h3>
// demo.component.ts export class DemoComponent implements OnInit, OnChanges { @Input() public count: number; constructor() { console.log('1. demo constructor') } ngOnChanges() { console.log('2. demo ngOnChanges') } ngOnInit() { console.log('3. demo ngOnInit') } }
当通过 @Input
将值传递给子组件 demo
的时候,就会触发 demo
组件中的 ngOnChanges
。
当 @Input
传递的属性发生改变的时候,可以多次触发 demo
组件中的 ngOnChanges
钩子函数。
<!-- app.component.html --> <div> <app-demo [count]="count"></app-demo> <button (click)="parentDemo()">parent button</button> </div>
// app.component.ts parentDemo() { this.count++; }
ngDoCheck
当发生变化检测的时候,触发该钩子函数。
这个钩子函数,紧跟在每次执行变更检测时候 ngOnChanges
和首次执行执行变更检测时 ngOnInit
后面调用。
// demo.component.ts ngDoCheck() { console.log('4. demo ngDoCheck') }
这个钩子函数调用得比较频繁,使用成本比较高,谨慎使用。
一般使用 ngOnChanges 来检测变动,而不是 ngDoCheck
ngAfterContentInit
当把外部的内容投影到内部组件,第一次调用 ngDoCheck
之后调用 ngAfterContentInit
,而且只调用一次。
// demo.component.ts ngAfterContentInit() { console.log('5. demo ngAfterContentInit'); }
ngAfterContentChecked
ngAfterContentChecked
钩子函数在每次 ngDoCheck
之后调用.
// demo.component.ts ngAfterContentChecked() { console.log('5. demo ngAfterContentChecked'); }
ngAfterViewInit
视图初始化完成调用此钩子函数。在第一次 ngAfterContentChecked
之后调用,只调用一次。
这个时候,获取页面的 DOM
수명 주기 후크
에 해당합니다. 그럼
angular
의 훅
은 무엇인가요? 프로그램을 작성해야 하는 위치에 대해서는 이를 이해하는 것이 중요합니다. [추천 관련 튜토리얼: "Angular 튜토리얼"]
angular< /code>에서 라이프사이클 실행 순서는 다음과 같습니다. 🎜<div class="code" style="position:relative; padding:0px; margin:0px;"><pre class='brush:php;toolbar:false;'>// demo.compoent.ts
ngAfterViewInit() {
console.log(&#39;7. demo ngAfterViewInit&#39;);
}</pre><div class="contentsignin">로그인 후 복사</div></div>🎜설명과 검증을 위해 <code>angular-cli
를 사용하여 demo
프로젝트를 생성합니다. 🎜생성자
🎜es6
의 클래스
가 객체를 초기화할 때 < code>constructor가 즉시 호출됩니다. 🎜// demo.component.ts ngAfterViewChecked() { console.log('8. ngAfterViewChecked') }
angular
의 구성 요소 자체는 클래스를 내보냅니다. 이 구성 요소가 새
인 경우 생성자
에서 기본값을 가져옵니다. 🎜ngOnChanges
🎜외부 매개변수가 변경되면ngOnChanges
를 실행한다고 합니다. 바인딩된 속성 값이 변경될 때 호출되는 구성 요소에 @Input
이 있다는 것입니다. 🎜🎜간단히 말하면, 상위 구성 요소가 하위 구성 요소의 요소를 바인딩하면 이 후크 기능이 트리거되고 여러 번 시작될 수 있습니다. 이는 항상 아래 ngOnInit
에 소개되어 있습니다. 🎜ngOnInit
🎜 이 메소드가 호출되면 구성요소가 성공적으로 초기화되었음을 의미합니다. 첫 번째ngOnChanges()
가 완료된 후 한 번만 호출됩니다. 🎜<!-- app.component.html --> <app-demo [count]="count" *ngIf="showDemoComponent"></app-demo> <button (click)="hideDemo()">hide demo component</button>

ngOnChanges
의 후크 기능 정보가 인쇄되지 않는 이유는 무엇입니까? 🎜🎜위에서 언급한 것처럼 @Input
의 속성 값이 변경되면 트리거 조건이 트리거되어야 합니다. 수정해 보겠습니다: 🎜// app.component.ts public showDemoComponent: boolean = true; hideDemo() { this.showDemoComponent = false }
// demo.component.ts ngOnDestroy() { console.log('9. demo ngOnDestroy') }

@Input
을 통해 하위 구성 요소인 demo
에 값이 전달되면 demo
구성 요소의 는 ngOnChanges
가 실행되었습니다. 🎜🎜@Input
에 의해 전달된 속성이 변경되면 demo
구성 요소의 ngOnChanges
후크 기능이 여러 번 트리거될 수 있습니다. 🎜rrreeerrree🎜
ngOnChanges
가 수행되고 처음으로 변경 감지가 수행될 때 ngOnInit
직후에 호출됩니다. 🎜rrreee🎜
🎜일반적으로 ngDoCheck 대신 ngOnChanges를 사용하여 변경 사항을 감지합니다🎜
ngAfterContentInit
🎜외부 콘텐츠를 처리할 때 내부 구성 요소에 대해ngDoCheck
가 처음으로 호출된 다음 ngAfterContentInit
가 한 번만 호출됩니다. 🎜rrreee🎜
ngAfterContentChecked
후크 함수는 각 ngDoCheck
후에 호출됩니다.🎜rrreee 🎜 
ngAfterViewInit
🎜뷰 초기화가 완료된 후 이 후크 함수를 호출하세요. 첫 번째ngAfterContentChecked
이후에 한 번만 호출됩니다. 🎜🎜이때 페이지의 DOM
노드를 얻는 것이 더 합리적입니다🎜rrreee🎜🎜🎜ngAfterViewChecked
视图检测完成调用。在 ngAfterViewinit
后调用,和在每次 ngAfterContentChecked
之后调用,也就是在每次 ngDoCheck
之后调用。
// demo.component.ts ngAfterViewChecked() { console.log('8. ngAfterViewChecked') }
ngOnDestroy
组件被销毁时候进行的操作。
在这个钩子函数中,我们可以取消订阅,取消定时操作等等。
<!-- app.component.html --> <app-demo [count]="count" *ngIf="showDemoComponent"></app-demo> <button (click)="hideDemo()">hide demo component</button>
// app.component.ts public showDemoComponent: boolean = true; hideDemo() { this.showDemoComponent = false }
// demo.component.ts ngOnDestroy() { console.log('9. demo ngOnDestroy') }
PS: 不知道读者有没有发现,调用一次的钩子函数都比较常用~
更多编程相关知识,请访问:编程入门!!
위 내용은 각도 학습은 수명주기에 대해 이야기합니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











WebSocket 및 JavaScript를 사용하여 온라인 음성 인식 시스템을 구현하는 방법 소개: 지속적인 기술 개발로 음성 인식 기술은 인공 지능 분야의 중요한 부분이 되었습니다. WebSocket과 JavaScript를 기반으로 한 온라인 음성 인식 시스템은 낮은 대기 시간, 실시간, 크로스 플랫폼이라는 특징을 갖고 있으며 널리 사용되는 솔루션이 되었습니다. 이 기사에서는 WebSocket과 JavaScript를 사용하여 온라인 음성 인식 시스템을 구현하는 방법을 소개합니다.

Angular.js는 동적 애플리케이션을 만들기 위해 자유롭게 액세스할 수 있는 JavaScript 플랫폼입니다. HTML 구문을 템플릿 언어로 확장하여 애플리케이션의 다양한 측면을 빠르고 명확하게 표현할 수 있습니다. Angular.js는 코드를 작성, 업데이트 및 테스트하는 데 도움이 되는 다양한 도구를 제공합니다. 또한 라우팅 및 양식 관리와 같은 많은 기능을 제공합니다. 이 가이드에서는 Ubuntu24에 Angular를 설치하는 방법에 대해 설명합니다. 먼저 Node.js를 설치해야 합니다. Node.js는 서버 측에서 JavaScript 코드를 실행할 수 있게 해주는 ChromeV8 엔진 기반의 JavaScript 실행 환경입니다. Ub에 있으려면

WebSocket과 JavaScript: 실시간 모니터링 시스템 구현을 위한 핵심 기술 서론: 인터넷 기술의 급속한 발전과 함께 실시간 모니터링 시스템이 다양한 분야에서 널리 활용되고 있다. 실시간 모니터링을 구현하는 핵심 기술 중 하나는 WebSocket과 JavaScript의 조합입니다. 이 기사에서는 실시간 모니터링 시스템에서 WebSocket 및 JavaScript의 적용을 소개하고 코드 예제를 제공하며 구현 원칙을 자세히 설명합니다. 1. 웹소켓 기술

C++에서 함수 포인터에는 적절한 소멸과 수명 주기 관리가 필요합니다. 이는 함수 포인터를 수동으로 소멸시키고 메모리를 해제함으로써 달성할 수 있습니다. std::unique_ptr 또는 std::shared_ptr과 같은 스마트 포인터를 사용하여 함수 포인터의 수명 주기를 자동으로 관리합니다. 함수 포인터를 객체에 바인딩하면 객체 수명 주기가 함수 포인터의 소멸을 관리합니다. GUI 프로그래밍에서 스마트 포인터를 사용하거나 객체에 바인딩하면 콜백 함수가 적절한 시간에 소멸되어 메모리 누수 및 불일치를 방지할 수 있습니다.

JavaScript 및 WebSocket을 사용하여 실시간 온라인 주문 시스템을 구현하는 방법 소개: 인터넷의 대중화와 기술의 발전으로 점점 더 많은 레스토랑에서 온라인 주문 서비스를 제공하기 시작했습니다. 실시간 온라인 주문 시스템을 구현하기 위해 JavaScript 및 WebSocket 기술을 사용할 수 있습니다. WebSocket은 TCP 프로토콜을 기반으로 하는 전이중 통신 프로토콜로 클라이언트와 서버 간의 실시간 양방향 통신을 실현할 수 있습니다. 실시간 온라인 주문 시스템에서는 사용자가 요리를 선택하고 주문을 하면

WebSocket과 JavaScript를 사용하여 온라인 예약 시스템을 구현하는 방법 오늘날의 디지털 시대에는 점점 더 많은 기업과 서비스에서 온라인 예약 기능을 제공해야 합니다. 효율적인 실시간 온라인 예약 시스템을 구현하는 것이 중요합니다. 이 기사에서는 WebSocket과 JavaScript를 사용하여 온라인 예약 시스템을 구현하는 방법을 소개하고 구체적인 코드 예제를 제공합니다. 1. WebSocket이란 무엇입니까? WebSocket은 단일 TCP 연결의 전이중 방식입니다.

Angular 프레임워크의 구성 요소에 대한 기본 표시 동작은 블록 수준 요소에 대한 것이 아닙니다. 이 디자인 선택은 구성 요소 스타일의 캡슐화를 촉진하고 개발자가 각 구성 요소가 표시되는 방법을 의식적으로 정의하도록 장려합니다. CSS 속성 표시를 명시적으로 설정하면 Angular 구성 요소의 표시를 완전히 제어하여 원하는 레이아웃과 응답성을 얻을 수 있습니다.

JavaScript 및 WebSocket: 효율적인 실시간 일기 예보 시스템 구축 소개: 오늘날 일기 예보의 정확성은 일상 생활과 의사 결정에 매우 중요합니다. 기술이 발전함에 따라 우리는 날씨 데이터를 실시간으로 획득함으로써 보다 정확하고 신뢰할 수 있는 일기예보를 제공할 수 있습니다. 이 기사에서는 JavaScript 및 WebSocket 기술을 사용하여 효율적인 실시간 일기 예보 시스템을 구축하는 방법을 알아봅니다. 이 문서에서는 특정 코드 예제를 통해 구현 프로세스를 보여줍니다. 우리
