## Angular 2中@Input和@Output的区别与使用
Angular 2 是一个流行的前端框架,提供了许多强大的功能来构建动态且可维护的Web应用程序。在Angular 2中,@Input和@Output是两个常用的装饰器,用于在组件之间传递数据和事件。虽然它们都涉及组件之间的通信,但它们有着不同的用途和工作原理。### @Input装饰器@Input装饰器用于在子组件中接收父组件传递的数据。通过在子组件的属性前添加@Input装饰器,可以将数据从父组件传递到子组件。这种机制使得组件之间能够更好地协同工作,实现了父子组件之间的数据共享。typescript// 父组件import { Component } from '@angular/core';@Component({ selector: 'app-parent', template: ` `})export class ParentComponent { dataFromParent = 'Hello from parent!';}typescript// 子组件import { Component, Input } from '@angular/core';@Component({ selector: 'app-child', template: ` {{ childData }}
`})export class ChildComponent { @Input() parentData: string; get childData(): string { return `Child says: ${this.parentData}`; }}在上面的例子中,父组件通过使用@Input装饰器将数据传递给子组件,子组件通过`parentData`属性接收并显示相应的信息。### @Output装饰器@Output装饰器用于在子组件中触发事件,并将事件发送到父组件。通过在子组件的事件属性上添加@Output装饰器,可以在子组件中定义一个可以被外部监听的事件。typescript// 子组件import { Component, Output, EventEmitter } from '@angular/core';@Component({ selector: 'app-child', template: ` `})export class ChildComponent { @Output() customEvent = new EventEmitter(); sendEvent(): void { this.customEvent.emit(); }} typescript// 父组件import { Component } from '@angular/core';@Component({ selector: 'app-parent', template: ` `})export class ParentComponent { handleEvent(): void { console.log('Event received in parent component!'); }}在上述例子中,子组件通过@Output装饰器定义了一个名为`customEvent`的事件,并在需要时触发该事件。父组件则通过监听这个事件来执行相应的逻辑。### 在Angular 2中,@Input和@Output是两个关键的装饰器,用于实现组件之间的数据传递和事件触发。@Input用于从父组件向子组件传递数据,而@Output用于在子组件中触发事件并将事件发送到父组件。这两者共同为Angular应用程序提供了强大的组件通信机制,使得应用的各个部分能够更加灵活地协同工作。