真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Angular中Input和Output有什么用

這篇文章將為大家詳細(xì)講解有關(guān)Angular中Input和Output有什么用,小編覺(jué)得挺實(shí)用的,因此分享給大家做個(gè)參考,希望大家閱讀完這篇文章后可以有所收獲。

在武陟等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強(qiáng)發(fā)展的系統(tǒng)性、市場(chǎng)前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供成都做網(wǎng)站、成都網(wǎng)站建設(shè)、成都外貿(mào)網(wǎng)站建設(shè) 網(wǎng)站設(shè)計(jì)制作定制網(wǎng)站開(kāi)發(fā),公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),品牌網(wǎng)站建設(shè),成都全網(wǎng)營(yíng)銷,外貿(mào)網(wǎng)站建設(shè),武陟網(wǎng)站建設(shè)費(fèi)用合理。

Input 是屬性裝飾器,用來(lái)定義組件內(nèi)的輸入屬性。在實(shí)際應(yīng)用場(chǎng)合,我們主要用來(lái)實(shí)現(xiàn)父組件向子組件傳遞數(shù)據(jù)。Angular 應(yīng)用是由各式各樣的組件組成,當(dāng)應(yīng)用啟動(dòng)時(shí),Angular 會(huì)從根組件開(kāi)始啟動(dòng),并解析整棵組件樹(shù),數(shù)據(jù)由上而下流下下一級(jí)子組件。

@Input()

counter.component.ts
import { Component, Input } from '@angular/core';
@Component({
    selector: 'exe-counter',
    template: `
      

當(dāng)前值: {{ count }}

` }) export class CounterComponent { @Input() count: number = 0; increment() { this.count++; } decrement() { this.count--; } }

app.component.ts

import { Component } from '@angular/core';
@Component({
  selector: 'exe-app',
  template: `
   
  `
})
export class AppComponent {
  initialCount: number = 5;
}

@Input(‘bindingPropertyName’)

Input 裝飾器支持一個(gè)可選的參數(shù),用來(lái)指定組件綁定屬性的名稱。如果沒(méi)有指定,則默認(rèn)使用 @Input 裝飾器,裝飾的屬性名。具體示例如下:

counter.component.ts

import { Component, Input } from '@angular/core';
@Component({
    selector: 'exe-counter',
    template: `
      

當(dāng)前值: {{ count }}

` }) export class CounterComponent { @Input('value') count: number = 0; ... // 其余代碼未改變 }

app.component.ts

import { Component } from '@angular/core';
@Component({
  selector: 'exe-app',
  template: `
   
  `
})
export class AppComponent {
  initialCount: number = 5;
}

setter & getter

setter 和 getter 是用來(lái)約束屬性的設(shè)置和獲取,它們提供了一些屬性讀寫(xiě)的封裝,可以讓代碼更便捷,更具可擴(kuò)展性。通過(guò) setter 和 getter 方式,我們對(duì)類中的私有屬性進(jìn)行了封裝,能避免外界操作影響到該私有屬性。此外通過(guò) setter 我們還可以封裝一些業(yè)務(wù)邏輯,具體示例如下:

counter.component.ts

import { Component, Input } from '@angular/core';
@Component({
    selector: 'exe-counter',
    template: `
      

當(dāng)前值: {{ count }}

` }) export class CounterComponent { _count: number = 0; // 默認(rèn)私有屬性以下劃線開(kāi)頭,不是必須也可以使用$count biggerThanTen: boolean = false; @Input() set count (num: number) { this.biggerThanTen = num > 10; this._count = num; } get count(): number { return this._count; } increment() { this.count++; } decrement() { this.count--; } }

ngOnChanges

當(dāng)數(shù)據(jù)綁定輸入屬性的值發(fā)生變化的時(shí)候,Angular 將會(huì)主動(dòng)調(diào)用 ngOnChanges 方法。它會(huì)獲得一個(gè) SimpleChanges 對(duì)象,包含綁定屬性的新值和舊值,它主要用于監(jiān)測(cè)組件輸入屬性的變化。具體示例如下:

import { Component, Input, SimpleChanges, OnChanges } from '@angular/core';
@Component({
    selector: 'exe-counter',
    template: `
      

當(dāng)前值: {{ count }}

` }) export class CounterComponent implements OnChanges{ @Input() count: number = 0; ngOnChanges(changes: SimpleChanges) { console.dir(changes['count']); } increment() { this.count++; } decrement() { this.count--; } }

上面例子中需要注意的是,當(dāng)手動(dòng)改變輸入屬性的值,是不會(huì)觸發(fā) ngOnChanges 鉤子的。

Output 是屬性裝飾器,用來(lái)定義組件內(nèi)的輸出屬性。前面我們介紹了 Input 裝飾器的作用,也了解了當(dāng)應(yīng)用啟動(dòng)時(shí),Angular 會(huì)從根組件開(kāi)始啟動(dòng),并解析整棵組件樹(shù),數(shù)據(jù)由上而下流下下一級(jí)子組件。而我們今天介紹的 Output 裝飾器,是用來(lái)實(shí)現(xiàn)子組件將信息通過(guò)事件的形式通知到父級(jí)組件。

在介紹 Output 屬性裝飾器前,我們先來(lái)介紹一下 EventEmitter 這個(gè)幕后英雄。它用來(lái)觸發(fā)自定義事件,具體使用示例如下:

let numberEmitter: EventEmitter = new EventEmitter(); 
numberEmitter.subscribe((value: number) => console.log(value));
numberEmitter.emit(10);

在 Angular 中的 EventEmitter 應(yīng)用場(chǎng)景是:

子指令創(chuàng)建一個(gè) EventEmitter 實(shí)例,并將其作為輸出屬性導(dǎo)出。子指令調(diào)用已創(chuàng)建的 EventEmitter 實(shí)例中的 emit(payload) 方法來(lái)觸發(fā)一個(gè)事件,父指令通過(guò)事件綁定 (eventName) 的方式監(jiān)聽(tīng)該事件,并通過(guò) $event 對(duì)象來(lái)獲取 payload 對(duì)象。是不是感覺(jué)有點(diǎn)抽象,我們馬上實(shí)戰(zhàn)一下。

@Output()

counter.component.ts
import { Component, Input, Output, EventEmitter } from '@angular/core';
@Component({
    selector: 'exe-counter',
    template: `
      

當(dāng)前值: {{ count }}

` }) export class CounterComponent { @Input() count: number = 0; @Output() change: EventEmitter = new EventEmitter(); increment() { this.count++; this.change.emit(this.count); } decrement() { this.count--; this.change.emit(this.count); } }

app.component.ts

import { Component } from '@angular/core';
@Component({
  selector: 'exe-app',
  template: `
   

{{changeMsg}}

` }) export class AppComponent { initialCount: number = 5; changeMsg: string; countChange(event: number) { this.changeMsg = `子組件change事件已觸發(fā),當(dāng)前值是: ${event}`; } }

@Output(‘bindingPropertyName’)

Output 裝飾器支持一個(gè)可選的參數(shù),用來(lái)指定組件綁定屬性的名稱。如果沒(méi)有指定,則默認(rèn)使用 @Output 裝飾器,裝飾的屬性名。具體示例如下:

counter.component.ts

import { Component, Input, Output, EventEmitter } from '@angular/core';
@Component({
    selector: 'exe-counter',
    template: `
      

當(dāng)前值: {{ count }}

` }) export class CounterComponent { @Input() count: number = 0; @Output('countChange') change: EventEmitter = new EventEmitter(); ... // 其余代碼未改變 }

app.component.ts

import { Component } from '@angular/core';
@Component({
  selector: 'exe-app',
  template: `
   

{{changeMsg}}

` }) export class AppComponent { initialCount: number = 5; changeMsg: string; countChange(event: number) { this.changeMsg = `子組件change事件已觸發(fā),當(dāng)前值是: ${event}`; } }

雙向綁定

在介紹雙向綁定之前,我們先來(lái)說(shuō)個(gè)需求:即在 CounterComponent 子組件 count 值發(fā)生變化的時(shí)候,需同步更新 AppComponent 父組件中的 initialCount 的值。通過(guò)上面的實(shí)例,我們知道我們可以在 AppComponent 父組件中監(jiān)聽(tīng) CounterComponent 子組件的 change 事件,然后在 change 事件中更新 initialCount 的值。具體示例如下:

counter.component.ts

import { Component, Input, Output, EventEmitter } from '@angular/core';
@Component({
    selector: 'exe-counter',
    template: `
      

子組件當(dāng)前值: {{ count }}

` }) export class CounterComponent { @Input() count: number = 0; @Output() change: EventEmitter = new EventEmitter(); increment() { this.count++; this.change.emit(this.count); } decrement() { this.count--; this.change.emit(this.count); } }

app.component.ts

import { Component } from '@angular/core';
@Component({
  selector: 'exe-app',
  template: `
   

父組件當(dāng)前值:{{ initialCount }}

` }) export class AppComponent { initialCount: number = 5; }

其實(shí)雙向綁定是由兩個(gè)單向綁定組成:

模型 -> 視圖數(shù)據(jù)綁定

視圖 -> 模型事件綁定

Angular 中 [] 實(shí)現(xiàn)了模型到視圖的數(shù)據(jù)綁定,() 實(shí)現(xiàn)了視圖到模型的事件綁定。把它們兩個(gè)結(jié)合在一起 [()] 就實(shí)現(xiàn)了雙向綁定。也被稱為 banana in the box 語(yǔ)法。

[()] 語(yǔ)法示例

counter.component.ts

import { Component, Input, Output, EventEmitter } from '@angular/core';
@Component({
    selector: 'exe-counter',
    template: `
      

子組件當(dāng)前值: {{ count }}

` }) export class CounterComponent { @Input() count: number = 0; // 輸出屬性名稱變更: change -> countChange @Output() countChange: EventEmitter = new EventEmitter(); ... // 其余代碼未改變 }

app.component.ts

import { Component } from '@angular/core';
@Component({
  selector: 'exe-app',
  template: `
   

父組件當(dāng)前值:{{ initialCount }}

` }) export class AppComponent { initialCount: number = 5; }

從上面可以看出,[(modelName)] 可以拆分成兩部分 modelName 和 modelNameChange ,[modelName] 用于綁定輸入屬性,(modelNameChange) 用于綁定輸出屬性。當(dāng) Angular 在解析模板時(shí),遇到 [(modelName)] 形式的綁定語(yǔ)法,它會(huì)期待這個(gè)指令中會(huì)存在一個(gè)名為 modelName 的輸入屬性和一個(gè)名為 modelNameChange 的輸出屬性。

ngModel

使用過(guò) Angular 1.x 的讀者,應(yīng)該很熟悉 ng-model 這個(gè)指令,我們通過(guò)它來(lái)實(shí)現(xiàn)數(shù)據(jù)的雙向綁定。那么在 Angular 中有對(duì)應(yīng)的指令么 ?答案是有滴,它就是 ngModel 指令。

ngModel雙向綁定示例

import { Component } from '@angular/core';
@Component({
  selector: 'exe-app',
  template: `
   

你輸入的用戶名是:{{ username }}

` }) export class AppComponent { username: string = ''; }

ngModel表單驗(yàn)證示例

import { Component } from '@angular/core';
@Component({
  selector: 'exe-app',
  styles:[
    `.error { border: 1px solid red;}`
  ],
  template: `
   

你輸入的用戶名是:{{ username }}

{{nameModel.errors | json}} ` }) export class AppComponent { username: string = ''; }

以上示例利用 @Directive 指令 metadata 信息中的 exportAs 屬性,獲取 ngModel 實(shí)例,進(jìn)行獲取控件的狀態(tài),控件狀態(tài)分類如下:

valid - 表單值有效

pristine - 表單值未改變

dirty - 表單值已改變

touched - 表單已被訪問(wèn)過(guò)

untouched - 表單未被訪問(wèn)過(guò)

關(guān)于Angular中Input和Output有什么用就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到。


當(dāng)前名稱:Angular中Input和Output有什么用
分享網(wǎng)址:http://weahome.cn/article/pogghg.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部