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

        Angular父子組件間怎么進行通信?父子傳值的方式淺析

        Angular父子組件間怎么進行通信?本篇文章給大家介紹一下Angular父子組件傳值方式。

        Angular父子組件間怎么進行通信?父子傳值的方式淺析

        通過Input和Ouput傳值

        父組件:html和ts

        <app-liftcycle [name]="name" (changeName)="changeName($event)"></app-liftcycle>
        public name: string = "jack"; public changeName(value: string) {     this.name = value; }

        子組件:html和ts

        <div (click)="emit()">{{name}}</div>
        import { Component, Input, EventEmitter, Output } from '@angular/core'; @Input() name: string; @Output() changeName: EventEmitter<string> = new EventEmitter<string>(); public emit() {     this.changeName.emit("修改name屬性"); }

        【相關教程推薦:《angular教程》】

        通過setter監聽屬性的變化

        父組件同上,子組件:

        private _name: string = ""; @Input()  public get name(): string {     return this._name; } public set name(value: string) {     this._name = value + "定義結構"; }

        通過ngOnChanges鉤子函數監聽輸入屬性的變化

        ngOnChanges在監聽多個屬性的時候,要比setter的方式簡便一些。

        @Input() name: string; ngOnChanges(changes: SimpleChanges): void {     (({name}) => {         console.log(name.currentValue,name.previousValue);     })(changes); }

        父組件html中通過模板變量調用子組件的方法和屬性。

        模板變量獲取了子組件的一個引用。 父組件:

        <app-liftcycle #child></app-liftcycle> <button (click)="child.childFn()">按鈕</button>

        子組件:

        public childFn() {     console.log("通過模板變量調用子組件中的方法"); }

        父組件通過ViewChild獲取子組件實例

        <app-liftcycle [name]="name" (changeName)="changeName($event)" #child></app-liftcycle> <button (click)="childFn()">childFn</button>
        @ViewChild("child") child: LiftcycleComponent; public childFn(): void {     this.child.childFn(); }

        通過service進行通信

        service:

        import { Subject } from 'rxjs'; import { Injectable } from '@angular/core';  @Injectable({     providedIn: 'root' }) export class CommunService {      constructor() {}     public commun = new Subject<string>();     communSend() {         this.commun.next("send");     } }

        父組件:

        constructor(private commun: CommunService) { } public send(): void {     this.commun.communSend(); }

        子組件:

        constructor(private commun: CommunService) {      this.commun.commun.subscribe((value) => {console.log(value)}); }

        父組件傳遞方法

        父組件通過屬性傳遞給子組件方法,子組件進行調用,一般不推薦,React采用這種通信方式。 可能是基于this的綁定錯綜復雜,所以angular不太推薦。React Hooks的出現也有一部分原因 是class類的this錯綜復雜。 父組件:

        <app-liftcycle [send]="send.bind(this)"></app-liftcycle>
        public name: string = "jack"; public send(): void {     console.log(this.name); }

        子組件:

        <button (click)="childSend()">childSend</button>
        @Input() send: Function; public childSend() {     this.send(); }

        贊(0)
        分享到: 更多 (0)
        網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
        主站蜘蛛池模板: 欧美日韩精品一区二区| 欧美精品一区二区三区在线| 国语自产精品视频在线区| 国产亚洲精品精品国产亚洲综合 | 亚洲Av无码精品色午夜| 国产精品美女久久久网AV| 99re热视频这里只精品| 无码精品国产VA在线观看| 日韩精品电影一区亚洲| 国产精品美女久久久久AV福利 | 久久久久人妻精品一区| 日韩精品亚洲专区在线观看| 国产精品人人做人人爽| 精品福利一区二区三| 国内精品久久久久影院日本 | 国产高清一级毛片精品| 99久久亚洲综合精品成人| 久久精品国产精品亚洲精品| 92国产精品午夜福利| 国产成人无码精品一区二区三区| 日韩人妻精品一区二区三区视频| 亚洲欧洲久久久精品| 日本精品一区二区久久久| 久久久久99精品成人片三人毛片| 精品偷自拍另类在线观看丰满白嫩大屁股ass | 久久九九青青国产精品| 国产精品视频一区国模私拍 | 国产suv精品一区二区33| 九九精品99久久久香蕉| 无码国产69精品久久久久网站| 亚洲欧美精品AAAAAA片| 亚洲AV第一页国产精品| 人妻少妇乱子伦精品| 日韩精品内射视频免费观看| 日韩精品无码一区二区三区不卡| 色欲国产麻豆一精品一AV一免费 | 97精品人妻系列无码人妻| 精品一区二区三区四区| 在线电影国产精品| 亚洲av永久无码精品网站| 国产精品久久久99|