# Angular 组件间传值与交互指南 在 Angular 应用中,组件之间的通信是构建动态和复杂用户界面的关键。Angular 提供了多种方法来实现组件间的传值与交互。本文档将详细介绍如何在 Angular 项目中使用这些方法。 ## 目录 - [父组件向子组件传值](#父组件向子组件传值) - [子组件向父组件传值](#子组件向父组件传值) - [兄弟组件之间的传值](#兄弟组件之间的传值) - [服务共享数据](#服务共享数据) ## 父组件向子组件传值 ### 使用 @Input 装饰器 1. 在父组件的模板中,通过属性绑定的方式将数据传递给子组件。 2. 子组件通过 `@Input()` 装饰器接收父组件的数据。 ```typescript // child.component.ts import { Component, Input } from '@angular/core'; @Component({ selector: 'app-child', template: `

{{data}}

` }) export class ChildComponent { @Input() data: string; } ``` ```html ``` ## 子组件向父组件传值 ### 使用 @Output 和 EventEmitter 1. 子组件定义一个输出属性,并使用 `EventEmitter` 发出事件。 2. 父组件监听子组件发出的事件,并进行相应的处理。 ```typescript // child.component.ts import { Component, Output, EventEmitter } from '@angular/core'; @Component({ selector: 'app-child', template: `` }) export class ChildComponent { @Output() valueChange = new EventEmitter(); emitValue() { this.valueChange.emit('Hello from child'); } } ``` ```html ``` ## 兄弟组件之间的传值 ### 通过共同的服务 当两个组件之间没有直接的父子关系时,可以通过一个共享的服务来交换数据。 1. 创建一个服务并在其中定义可观察对象(如 `Subject` 或 `BehaviorSubject`)。 2. 在需要发送数据的组件中调用服务的方法更新数据。 3. 在需要接收数据的组件中订阅该服务的数据变化。 ```typescript // data.service.ts import { Injectable } from '@angular/core'; import { BehaviorSubject } from 'rxjs'; @Injectable({ providedIn: 'root' }) export class DataService { private dataSource = new BehaviorSubject('default message'); currentMessage = this.dataSource.asObservable(); changeMessage(message: string) { this.dataSource.next(message); } } ``` ## 服务共享数据 服务不仅可用于兄弟组件间的通信,还可以作为全局状态管理工具,帮助你组织和共享应用中的数据。 ### 使用依赖注入 确保你的服务在根模块或需要使用的模块中声明 `providedIn: 'root'`,这样 Angular 会自动提供并单例化你的服务。 --- 以上内容简要介绍了 Angular 中组件间传值的基本方法。根据实际应用场景的不同,你可能需要组合使用这些方法以满足更复杂的业务需求。希望这份文档能帮助你更好地理解和实践 Angular 组件间的交互。