91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

ngOnInit和constructor怎么在Angular 中使用

發布時間:2021-03-30 16:49:02 來源:億速云 閱讀:204 作者:Leah 欄目:web開發

ngOnInit和constructor怎么在Angular 中使用?相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。

1. constructor

constructor應該是ES6中明確使用constructor來表示構造函數的,構造函數使用在class中,用來做初始化操作。當包含constructor的類被實例化時,構造函數將被調用。

來看例子:

class AppComponent {
  public name: string;
  constructor(name) {
    console.log('Constructor initialization');
    this.name = name;
  }
}

let appCmp = new AppComponent('AppCmp');  // 這時候構造函數將被調用。
console.log(appCmp.name);

轉成ES5代碼如下:

var AppComponent = (function () {
  function AppComponent(name) {
    console.log('Constructor initialization');
    this.name = name;
  }
  return AppComponent;  // 這里直接返回一個實例
}());
var appCmp = new AppComponent('AppCmp');
console.log(appCmp.name);

2. ngOnInit

ngOnInitAngularOnInit鉤子的實現。用來初始化組件。

Angular中生命周期鉤子的調用順序如下:

  1. ngOnChanges -- 當被綁定的輸入屬性的值發生變化時調用,首次調用一定會發生在ngOnInit()之前。

  2. ngOnInit() -- 在Angular第一次顯示數據綁定和設置指令/組件的輸入屬性之后,初始化指令/組件。在第一輪ngOnChanges()完成之后調用,只調用一次。

  3. ngDoCheck -- 自定義的方法,用于檢測和處理值的改變。

  4. ngAfterContentInit -- 在組件內容初始化之后調用,只適用于組件

  5. ngAfterContentChecked -- 組件每次檢查內容時調用,只適用于組件

  6. ngAfterViewInit -- 組件相應的視圖初始化之后調用,只適用于組件

  7. ngAfterViewChecked -- 組件每次檢查視圖時調用,只適用于組件

  8. ngOnDestroy -- 當Angular每次銷毀指令/組件之前調用并清掃。在這兒反訂閱可觀察對象和分離事件處理器,以防內存泄漏。

在Angular銷毀指令/組件之前調用。

了解了這些之后我們來看一個例子:

import { Component, OnInit } from '@angular/core';

@Component({
 selector: 'my-app',
 template: `
  <h2>Welcome to Angular World</h2>
 `,
})
export class AppComponent implements OnInit {

 constructor() {
  console.log('Constructor initialization');
 }

 ngOnInit() {
  console.log('ngOnInit hook has been called');
 }
}

這里輸出的是:

Constructor initialization
ngOnInit hook has been called

可以看出,constructor的執行是在先的。

那么既然ngOnchanges是輸入屬性值變化的時候調用,并且ngOnInit是在ngOnchanges執行完之后才調用,而constructor是在組件就實例化的時候就已經調用了,這也就是說,在constructor中我們是取不到輸入屬性的值的。
所以還是看例子:

// parent.component.ts

import { Component } from '@angular/core';

@Component({
 selector: 'exe-parent',
 template: `
  <h2>Welcome to Angular World</h2>
  <p>Hello {{name}}</p>
  <exe-child [pname]="name"></exe-child>  <!-- 綁定到子組件的屬性 -->
 `,
})
export class ParentComponent {
 name: string;

 constructor() {
  this.name = 'God eyes';
 }
}
// child.component.ts

import { Component, Input, OnInit } from '@angular/core';

@Component({
  selector: 'exe-child',
  template: `
   <p>父組件的名稱:{{pname}} </p>
  `
})
export class ChildComponent implements OnInit {
  @Input()
  pname: string; // 父組件的輸入屬性

  constructor() {
    console.log('ChildComponent constructor', this.pname); // this.name=undefined
  }

  ngOnInit() {
    console.log('ChildComponent ngOnInit', this.pname); // this.name=God eyes
  }
}

一目了然。

3. 應用場景

看完的上面的部分可以發現,在constructor中不適合進行任何與組件通信類似的復雜操作,一般在constructor中值進行一些簡單的初始化工作:依賴注入,變量初始化等。

那么用到組件間通信的方法我們可以放在ngOnInit中去執行,比如異步請求等:

import { Component, ElementRef, OnInit } from '@angular/core';

@Component({
 selector: 'my-app',
 template: `
  <h2>Welcome to Angular World</h2>
  <p>Hello {{name}}</p>
 `,
})
export class AppComponent implements OnInt {
 name: string = '';

 constructor(public elementRef: ElementRef) { // 使用構造注入的方式注入依賴對象
  this.name = 'WXY';          // 執行初始化操作
 }

 ngOnInit() {
  this.gotId = this.activatedRoute.params.subscribe(params => this.articleId = params['id']);
 }
}

看完上述內容,你們掌握ngOnInit和constructor怎么在Angular 中使用的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

元氏县| 金山区| 九江县| 南靖县| 惠州市| 临清市| 海兴县| 武定县| 阳信县| 东乌珠穆沁旗| 新兴县| 五台县| 集安市| 盖州市| 辉县市| 富民县| 嘉义县| 喀喇沁旗| 南丰县| 信丰县| 玉环县| 潍坊市| 景洪市| 榕江县| 应城市| 汉寿县| 图们市| 防城港市| 瑞昌市| 准格尔旗| 辛集市| 游戏| 凤凰县| 太仓市| 阜新| 平武县| 砀山县| 彭水| 滕州市| 买车| 永兴县|