gmnon.cn-疯狂蹂躏欧美一区二区精品,欧美精品久久久久a,高清在线视频日韩欧美,日韩免费av一区二区

站長資訊網
最全最豐富的資訊網站

帶你了解Angular組件間進行通信的幾種方法

Angular組件間怎么通信?下面本篇文章帶大家了解一下Angular中組件通信的方法,希望對大家有所幫助!

帶你了解Angular組件間進行通信的幾種方法

上一篇,我們講了 Angular 結合 NG-ZORRO 快速開發。前端開發,很大程度上是組件化開發,永遠離不開組件之間的通信。那么,在 Angular 開發中,其組件之間的通信是怎么樣的呢?【相關教程推薦:《angular教程》】

舉一反三,VueReact 中大同小異

本文純文字,比較枯燥。因為控制臺打印的東西比較雞肋,所以就不配圖了,嗯~希望讀者跟著說明代碼走一遍更容易吸收~

1. 父組件通過屬性傳遞值給子組件

相當于你自定義了一個屬性,通過組件的引入,將值傳遞給子組件。Show you the CODE

<!-- parent.component.html -->  <app-child [parentProp]="'My kid.'"></app-child>
登錄后復制

在父組件中調用子組件,這里命名一個 parentProp 的屬性。

// child.component.ts  import { Component, OnInit, Input } from '@angular/core';  @Component({   selector: 'app-child',   templateUrl: './child.component.html',   styleUrls: ['./child.component.scss'] }) export class ChildComponent implements OnInit {   // 輸入裝飾器   @Input()   parentProp!: string;    constructor() { }    ngOnInit(): void {   } }
登錄后復制

子組件接受父組件傳入的變量 parentProp,回填到頁面。

<!-- child.component.html -->  <h1>Hello! {{ parentProp }}</h1>
登錄后復制

2. 子組件通過 Emitter 事件傳遞信息給父組件

通過 new EventEmitter() 將子組件的數據傳遞給父組件。

// child.component.ts  import { Component, OnInit, Output, EventEmitter } from '@angular/core';  @Component({   selector: 'app-child',   templateUrl: './child.component.html',   styleUrls: ['./child.component.scss'] }) export class ChildComponent implements OnInit {   // 輸出裝飾器   @Output()   private childSayHi = new EventEmitter()    constructor() { }    ngOnInit(): void {     this.childSayHi.emit('My parents');   } }
登錄后復制

通過 emit 通知父組件,父組件對事件進行監聽。

// parent.component.ts  import { Component, OnInit } from '@angular/core';  @Component({   selector: 'app-communicate',   templateUrl: './communicate.component.html',   styleUrls: ['./communicate.component.scss'] }) export class CommunicateComponent implements OnInit {    public msg:string = ''    constructor() { }    ngOnInit(): void {   }    fromChild(data: string) {     // 這里使用異步     setTimeout(() => {       this.msg = data     }, 50)   } }
登錄后復制

在父組件中,我們對 child 組件來的數據進行監聽后,這里采用了 setTimeout 的異步操作。是因為我們在子組件中初始化后就進行了 emit,這里的異步操作是防止 Race Condition 競爭出錯。

我們還得在組件中添加 fromChild 這個方法,如下:

<!-- parent.component.html -->  <h1>Hello! {{ msg }}</h1> <app-child (childSayHi)="fromChild($event)"></app-child>
登錄后復制

3. 通過引用,父組件獲取子組件的屬性和方法

我們通過操縱引用的方式,獲取子組件對象,然后對其屬性和方法進行訪問。

我們先設置子組件的演示內容:

// child.component.ts  import { Component, OnInit } from '@angular/core';  @Component({   selector: 'app-child',   templateUrl: './child.component.html',   styleUrls: ['./child.component.scss'] }) export class ChildComponent implements OnInit {    // 子組件的屬性   public childMsg:string = 'Prop: message from child'    constructor() { }    ngOnInit(): void {        }    // 子組件方法   public childSayHi(): void {     console.log('Method: I am your child.')   } }
登錄后復制

我們在父組件上設置子組件的引用標識 #childComponent

<!-- parent.component.html -->  <app-child #childComponent></app-child>
登錄后復制

之后在 javascript 文件上調用:

import { Component, OnInit, ViewChild } from '@angular/core'; import { ChildComponent } from './components/child/child.component';  @Component({   selector: 'app-communicate',   templateUrl: './communicate.component.html',   styleUrls: ['./communicate.component.scss'] }) export class CommunicateComponent implements OnInit {   @ViewChild('childComponent')   childComponent!: ChildComponent;    constructor() { }    ngOnInit(): void {     this.getChildPropAndMethod()   }    getChildPropAndMethod(): void {     setTimeout(() => {       console.log(this.childComponent.childMsg); // Prop: message from child       this.childComponent.childSayHi(); // Method: I am your child.     }, 50)   }  }
登錄后復制

這種方法有個限制?,就是子屬性的修飾符需要是 public,當是 protected 或者 private 的時候,會報錯。你可以將子組件的修飾符更改下嘗試。報錯的原因如下:

類型 使用范圍
public 允許在累的內外被調用,作用范圍最廣
protected 允許在類內以及繼承的子類中使用,作用范圍適中
private 允許在類內部中使用,作用范圍最窄

4. 通過 service 去變動

我們結合 rxjs 來演示。

rxjs 是使用 Observables 的響應式編程的庫,它使編寫異步或基于回調的代碼更容易。

后期會有一篇文章記錄 rxjs,敬請期待

我們先來創建一個名為 parent-and-child 的服務。

// parent-and-child.service.ts  import { Injectable } from '@angular/core'; import { BehaviorSubject, Observable } from 'rxjs'; // BehaviorSubject 有實時的作用,獲取最新值  @Injectable({   providedIn: 'root' }) export class ParentAndChildService {    private subject$: BehaviorSubject<any> = new BehaviorSubject(null)    constructor() { }      // 將其變成可觀察   getMessage(): Observable<any> {     return this.subject$.asObservable()   }    setMessage(msg: string) {     this.subject$.next(msg);   } }
登錄后復制

接著,我們在父子組件中引用,它們的信息是共享的。

// parent.component.ts  import { Component, OnDestroy, OnInit } from '@angular/core'; // 引入服務 import { ParentAndChildService } from 'src/app/services/parent-and-child.service'; import { Subject } from 'rxjs' import { takeUntil } from 'rxjs/operators'  @Component({   selector: 'app-communicate',   templateUrl: './communicate.component.html',   styleUrls: ['./communicate.component.scss'] }) export class CommunicateComponent implements OnInit, OnDestroy {   unsubscribe$: Subject<boolean> = new Subject();    constructor(     private readonly parentAndChildService: ParentAndChildService   ) { }    ngOnInit(): void {     this.parentAndChildService.getMessage()       .pipe(         takeUntil(this.unsubscribe$)       )       .subscribe({         next: (msg: any) => {           console.log('Parent: ' + msg);            // 剛進來打印 Parent: null           // 一秒后打印 Parent: Jimmy         }       });     setTimeout(() => {       this.parentAndChildService.setMessage('Jimmy');     }, 1000)   }    ngOnDestroy() {     // 取消訂閱     this.unsubscribe$.next(true);     this.unsubscribe$.complete();   } }
登錄后復制

import { Component, OnInit } from '@angular/core'; import { ParentAndChildService } from 'src/app/services/parent-and-child.service';  @Component({   selector: 'app-child',   templateUrl: './child.component.html',   styleUrls: ['./child.component.scss'] }) export class ChildComponent implements OnInit {   constructor(     private parentAndChildService: ParentAndChildService   ) { }         // 為了更好理解,這里我移除了父組件的 Subject   ngOnInit(): void {     this.parentAndChildService.getMessage()       .subscribe({         next: (msg: any) => {           console.log('Child: '+msg);           // 剛進來打印 Child: null           // 一秒后打印 Child: Jimmy         }       })   } }
登錄后復制

在父組件中,我們一秒鐘之后更改值。所以在父子組件中,一進來就會打印 msg 的初始值 null,然后過了一秒鐘之后,就會打印更改的值 Jimmy。同理,如果你在子組件中對服務的信息,在子組件打印相關的值的同時,在父組件也會打印。

贊(0)
分享到: 更多 (0)
網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
gmnon.cn-疯狂蹂躏欧美一区二区精品,欧美精品久久久久a,高清在线视频日韩欧美,日韩免费av一区二区
五月天丁香花婷婷| 色偷偷中文字幕| 永久免费看av| 91免费网站视频| 日韩在线一区视频| 激情黄色小视频| www.色就是色.com| 国产精品av免费| 日韩久久久久久久久久久久| 国产欧美123| 国产深夜男女无套内射| 日韩在线一级片| 国产成人av影视| 日韩av一卡二卡三卡| 国产美女视频免费看| 日本高清视频免费在线观看| 日韩精品一区二区在线视频 | 一级做a免费视频| 一区二区三区四区毛片| 亚洲天堂av免费在线观看| 懂色av粉嫩av蜜臀av| 日韩激情视频一区二区| 亚洲国产精品久久久久婷蜜芽| 午夜肉伦伦影院| 三区视频在线观看| 日本精品久久久久久久久久| 妺妺窝人体色www在线小说| 高清一区在线观看| 日本一道在线观看| 日本在线视频www| 一区二区三区日韩视频| 日本成年人网址| 三年中国中文在线观看免费播放 | 国产精品动漫网站| www激情五月| 日本精品免费在线观看| 欧美日韩在线免费观看视频| 男人日女人下面视频| 在线看免费毛片| 欧美视频免费播放| 一本大道东京热无码aⅴ| 五月婷婷狠狠操| 国产日韩av网站| dy888午夜| 亚洲精品自拍网| 91视频最新入口| 欧美中日韩在线| 国产高清精品软男同| 亚洲欧美激情网| 男女午夜激情视频| 成人免费a级片| gogogo免费高清日本写真| 在线免费观看av的网站| 国产h视频在线播放| 99久久免费观看| 一二三四中文字幕| 三日本三级少妇三级99| 激情视频免费网站| 黄色三级视频片| 欧美a在线视频| 国产极品美女高潮无套久久久| a天堂资源在线观看| 大陆极品少妇内射aaaaaa| 奇米777在线| 久久av喷吹av高潮av| 小早川怜子一区二区三区| 污污网站免费观看| 妺妺窝人体色www在线观看| 日本在线观看a| caoporn超碰97| 污污网站免费看| 色网站在线视频| 国产av第一区| 男人添女人下部高潮视频在观看| 日韩精品一区二区在线视频| 国产免费黄色一级片| 日本a视频在线观看| 国自产拍偷拍精品啪啪一区二区| 青青艹视频在线| 91精品无人成人www| 涩涩网站在线看| 成人国产在线看| 伊人成色综合网| 中文字幕成人在线视频| 性鲍视频在线观看| aa视频在线播放| www.超碰com| 99视频精品全部免费看| 欧美成人xxxxx| 国产资源中文字幕| 日本免费不卡一区二区| 三上悠亚在线一区二区| 日韩中文字幕亚洲精品欧美| 国产二级片在线观看| 一级黄色录像在线观看| 黄色片免费在线观看视频| 1024精品视频| 欧美与动交zoz0z| 88av.com| 欧美一级视频在线播放| 中文字幕精品一区二区三区在线| 亚洲色婷婷久久精品av蜜桃| 毛片一区二区三区四区| 9色视频在线观看| 婷婷丁香激情网| 18岁网站在线观看| 蜜臀av性久久久久蜜臀av| 爆乳熟妇一区二区三区霸乳| www.好吊操| 国产精品99久久久久久大便| 国产精品wwwww| www.xxx麻豆| 天堂av在线中文| 亚洲无在线观看| 天堂在线资源视频| 亚洲自偷自拍熟女另类| 国产精品免费看久久久无码| 在线观看高清免费视频| 无码人妻丰满熟妇区96| av片在线免费| avove在线观看| 婷婷中文字幕在线观看| 婷婷丁香激情网| 欧美综合在线观看视频| 看av免费毛片手机播放| 福利视频一二区| 17c丨国产丨精品视频| 欧美三级午夜理伦三级老人| 一级做a爱视频| 色网站在线视频| 91免费视频污| 人人妻人人澡人人爽精品欧美一区| 中文字幕国产传媒| 99re精彩视频| 三级av免费看| 国内自拍中文字幕| 可以看毛片的网址| 欧美 日韩 亚洲 一区| 国产精品久久中文字幕| www国产精品内射老熟女| av免费观看网| 亚洲成人av免费看| 91丝袜超薄交口足| 国产制服91一区二区三区制服| 国产乱子伦精品无码专区| 免费看国产一级片| 少妇性饥渴无码a区免费| 老熟妇仑乱视频一区二区| 亚洲人辣妹窥探嘘嘘| 爱爱爱视频网站| 青草视频在线观看视频| 337p粉嫩大胆噜噜噜鲁| 欧美三级午夜理伦三级富婆| 日本一二区免费| 日韩久久久久久久久久久久| 午夜精品久久久久久久无码| 特级丰满少妇一级| 影音先锋成人资源网站| 白嫩少妇丰满一区二区| 免费在线观看污网站| 国产精品999视频| 97超碰人人爽| 夫妻免费无码v看片| av噜噜在线观看| 欧美三级午夜理伦三级| 国产农村妇女精品久久| 波多野结衣综合网| 天堂网成人在线| 日本三级免费观看| 4444在线观看| 午夜免费高清视频| 免费毛片网站在线观看| 激情五月婷婷基地| 亚洲熟女乱色一区二区三区| 色撸撸在线观看| 亚洲 激情 在线| 国产精品-区区久久久狼| 影音先锋男人的网站| 91日韩视频在线观看| 国产淫片免费看| 国产自产在线视频| 一区中文字幕在线观看| 日本男人操女人| 日韩网址在线观看| 特级西西444| 女女同性女同一区二区三区按摩| 欧美一级裸体视频| 久久九九国产视频| 97成人在线观看视频| 欧美成人三级在线视频| 狠狠干视频网站| 中国女人做爰视频| 手机精品视频在线| 国产资源中文字幕| 在线播放黄色av| 国产精品亚洲天堂| 欧美日韩中文字幕在线播放| 国产一级黄色录像片| 一级黄色录像免费看| xxxxxx在线观看|