在Angular中,输入/输出和服务是两种常见的组件和模块之间通信的方式。下面是一个示例,展示了如何在Angular 8中使用输入/输出和服务。
首先,我们创建一个名为parent.component.ts
的父组件,其中包含一个输入属性和一个输出属性。
import { Component } from '@angular/core';
@Component({
selector: 'app-parent',
template: `
Parent Component
`,
})
export class ParentComponent {
data: string = 'Hello World';
handleOutput(data: string) {
console.log(data);
}
}
在父组件中,我们使用inputData
将数据传递给子组件,并使用outputData
监听子组件的输出。
接下来,我们创建一个名为child.component.ts
的子组件,它接收输入数据并触发输出事件。
import { Component, Input, Output, EventEmitter } from '@angular/core';
@Component({
selector: 'app-child',
template: `
Child Component
{{ inputData }}
`,
})
export class ChildComponent {
@Input() inputData: string;
@Output() outputData = new EventEmitter();
handleClick() {
this.outputData.emit('Output from child component');
}
}
在子组件中,我们使用@Input()
装饰器接收父组件传递的数据,并使用@Output()
装饰器触发输出事件。
最后,我们需要将这两个组件添加到模块中,并将父组件添加到应用的根组件中。在app.module.ts
中,我们将父组件和子组件添加到declarations
数组中。
import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { AppComponent } from './app.component';
import { ParentComponent } from './parent.component';
import { ChildComponent } from './child.component';
@NgModule({
imports: [BrowserModule],
declarations: [AppComponent, ParentComponent, ChildComponent],
bootstrap: [AppComponent],
})
export class AppModule {}
这样,我们就完成了使用输入/输出进行组件间通信的示例。
另一种常见的通信方式是使用服务。在Angular中,服务是一个可注入的类,用于共享数据和功能。下面是一个示例,展示了如何在Angular 8中使用服务进行组件间通信。
首先,我们创建一个名为data.service.ts
的服务,其中包含一个共享数据的属性和一个共享方法。
import { Injectable } from '@angular/core';
@Injectable()
export class DataService {
sharedData: string = 'Shared data from service';
getSharedData() {
return this.sharedData;
}
}
在服务中,我们定义了一个sharedData
属性和一个getSharedData
方法,用于获取共享数据。
接下来,我们在父组件和子组件中注入这个服务,并使用它共享数据。
import { Component } from '@angular/core';
import { DataService } from './data.service';
@Component({
selector: 'app-parent',
template: `
Parent Component
{{ sharedData }}
`,
})
export class ParentComponent {
sharedData: string;
constructor(private dataService: DataService) {
this.sharedData = dataService.getSharedData();
}
}
@Component({
selector: 'app-child',
template: `
Child Component
{{ sharedData }}
`,
})
export class ChildComponent {
sharedData: string;
constructor(private dataService: DataService) {
this.sharedData = dataService.getSharedData();
}
}
在父组件和子组件中,我们通过构造函数注入了DataService
,并使用getSharedData
方法获取共享数据。
最后,我们需要将这些组件和服务添加到模块中,并将父组件添加到应用的根组件中。同样,在`