Angular组件通信

编程入门 行业动态 更新时间:2024-10-27 10:28:55

Angular<a href=https://www.elefans.com/category/jswz/34/1771375.html style=组件通信"/>

Angular组件通信

1 父传子 @input

  1. 给子组件标签自定义一个属性
<app-life [parentValue]="parentValue" #lifeComponent></app-life>
import {Component} from '@angular/core';@Component({selector: 'app-root',templateUrl: './appponent.html',styleUrls: ['./appponent.scss'],
})
export class AppComponent {public parentValue: string = 'parentValue'
}
  1. 子组件引入 Input 模块
import {Component, Input} from '@angular/core';@Component({selector: 'app-life',templateUrl: './lifeponent.html',styleUrls: ['./lifeponent.scss']
})
export class LifeComponent {@Input() parentValue: string;
}
<p>子组件接受父组件的传值:{{ parentValue }}</p>

2 子传父 @ViewChild

父组件:

<app-life [parentValue]="parentValue" #lifeComponent></app-life>
<button (click)="getSonValue()">getSonValue</button>
import {Component, ViewChild} from '@angular/core';@Component({selector: 'app-root',templateUrl: './appponent.html',styleUrls: ['./appponent.scss'],
})
export class AppComponent {public parentValue: string = 'parentValue'@ViewChild('lifeComponent') lifeComponent: anygetSonValue() {alert(this.lifeComponent.userName)}
}

子组件:

import {Component, Input} from '@angular/core';
@Component({selector: 'app-life',templateUrl: './lifeponent.html',styleUrls: ['./lifeponent.scss']
})
export class LifeComponent {public userName: string = 'sonValue'
}

3 output 子传父通信

Angular的Output属性是用于子组件向父组件传递信息的一种方式。通过在子组件中定义一个Output属性,子组件可以通过EventEmitter触发这个属性,父组件可以通过@Output的形式监听子组件的属性,并在属性被触发时调用相应的方法。

在子组件中定义Output属性和触发事件的方法。

<button (click)="toParentValue()">toParentValue</button>
import {Component, EventEmitter, Output} from '@angular/core';
@Component({selector: 'app-header',templateUrl: './headerponent.html',styleUrls: ['./headerponent.scss']
})
export class HeaderComponent {@Output() public outter = new EventEmitter()toParentValue() {this.outter.emit("i am sonValue")}
}

在上面的例子中,我们定义了一个名为outter 的Output属性,并在按钮的点击事件中通过EventEmitter触发了这个属性,并向父组件传递了一个字符串 i am sonValue 。

在父组件中引入子组件,并在模板中使用@Output装饰器监听子组件的Output属性。

<app-header (outter)="getValueBySonComponent($event)"></app-header>
import {Component} from '@angular/core';@Component({selector: 'app-root',templateUrl: './appponent.html',styleUrls: ['./appponent.scss'],
})
export class AppComponent {public parentValue: string = 'parentValue'getValueBySonComponent(e: any) {console.log(e);}
}

4 利用公共服务来实现非父子组件通讯

组件间共享一个service服务,那么组件之间就可以通过service实现通信。示例中我们使用rxjs中的BehaviorSubject,它是Subject的一种变体,可以存储最后一条数据或者初始默认值,并会在订阅时发送其当前值。您可以通过RxJS官网进行了解,当然通过文中的说明,您还是可以了解其具体实现的功能。

服务:TransValueService

import {Injectable} from '@angular/core';import { BehaviorSubject} from "rxjs";@Injectable({providedIn: 'root'
})
export class TransValueService {public subject: BehaviorSubject<any> = new BehaviorSubject<any>(0);constructor() {}
}

两个组件:HeaderComponent AppComponent

HeaderComponent 如下所示:

<p>app-header接收到的数据:{{ data }}</p>
<button (click)="updateDataFromAppHeader()">app-header发送数据</button>
import {Component, OnDestroy} from '@angular/core';
import {TransValueService} from "../../services/trans-value.service";
import {Subscription} from "rxjs";@Component({selector: 'app-header',templateUrl: './headerponent.html',styleUrls: ['./headerponent.scss']
})
export class HeaderComponent implements OnDestroy {public subscription: Subscriptionpublic data: string = ''constructor(public TransValueService: TransValueService) {this.subscription = this.TransValueService.subject.subscribe(data => this.data = data)}updateDataFromAppHeader() {let _data = this.data_data += '_zhaoshuai-lc'this.TransValueService.subject.next(_data)}ngOnDestroy(): void {this.subscription.unsubscribe();}
}

AppComponent 如下所示:

app-component组件发送数据:<input type="text" name="inputValue" [(ngModel)]="inputValue"> <button (click)="send()">发送</button>
<app-header></app-header>
import {Component} from '@angular/core';
import {TransValueService} from "./services/trans-value.service";
import {Subscription} from "rxjs";@Component({selector: 'app-root',templateUrl: './appponent.html',styleUrls: ['./appponent.scss'],
})
export class AppComponent {public inputValue: string = ''public subscription: Subscriptionconstructor(public TransValueService: TransValueService) {this.subscription = this.TransValueService.subject.subscribe(data => this.inputValue = data)}send() {this.TransValueService.subject.next(this.inputValue)}}

更多推荐

Angular组件通信

本文发布于:2023-11-17 00:25:52,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1635977.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:组件   通信   Angular

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!