Angular 8:通过本地服务在单独模块中的组件之间传递数据
Angular 8: passing data via local service between components in seperated modules
我有这个本地服务
private messageSource = new BehaviorSubject('default message')
public currentMessage = this.messageSource.asObservable();
constructor() { }
changeMessage(message: string) {
this.messageSource.next(message)
}
}
核心模块中的一个child组件
@Output('message') message= new EventEmitter<string>()
@Output('movies') movies =new EventEmitter<any>()
storedmovies:any
constructor(private localService: LocalService, private movieService: MoviesService) { }
ngOnInit() {
this.movieService.getStoredMovies().subscribe(data=>{
this.storedmovies=data
})
this.localService.currentMessage.subscribe(data=>console.log(data))
}
sendMessage(){
this.message.emit(this.storedmovies);
}
Childthtml
<button class="btn btn-danger" (click)="sendMessage()">Send Message</button>
管理模块中的管理组件
TS
ngOnInit() {
this.localService.currentMessage.subscribe(data=>console.log(data))
console.log(this.localService.changeMessage('new message'))
}
receivedMessage($event) {
console.log($event)
}
HTML
<app-child
(message)="receivedMessage($event)"> -> not recognized
但是在 child 注册的 appModule 中,导出数组中有它
@NgModule({
declarations: [
//etc
ChildComponent,
],
imports: [
/etc
],
exports:[
ChildComponent
],
所以我需要做什么才能在管理模块中识别 child 组件?我需要导入组件吗?我已经试过了,但没用...
根据您在问题中提供的模块结构,我理解的思路是:
改为在其模块 (CoreModule) 中声明和导出您的子组件
AppModule 的。
然后将这个模块导入到管理模块中。
我已经创建了 this example,您可以在其中看到它的工作原理。
https://stackblitz.com/edit/angular-ebetqi
Angular 文档非常好,看看这两个与模块相关的资源以及如何构建它们...
我有这个本地服务
private messageSource = new BehaviorSubject('default message')
public currentMessage = this.messageSource.asObservable();
constructor() { }
changeMessage(message: string) {
this.messageSource.next(message)
}
}
核心模块中的一个child组件
@Output('message') message= new EventEmitter<string>()
@Output('movies') movies =new EventEmitter<any>()
storedmovies:any
constructor(private localService: LocalService, private movieService: MoviesService) { }
ngOnInit() {
this.movieService.getStoredMovies().subscribe(data=>{
this.storedmovies=data
})
this.localService.currentMessage.subscribe(data=>console.log(data))
}
sendMessage(){
this.message.emit(this.storedmovies);
}
Childthtml
<button class="btn btn-danger" (click)="sendMessage()">Send Message</button>
管理模块中的管理组件
TS
ngOnInit() {
this.localService.currentMessage.subscribe(data=>console.log(data))
console.log(this.localService.changeMessage('new message'))
}
receivedMessage($event) {
console.log($event)
}
HTML
<app-child
(message)="receivedMessage($event)"> -> not recognized
但是在 child 注册的 appModule 中,导出数组中有它
@NgModule({
declarations: [
//etc
ChildComponent,
],
imports: [
/etc
],
exports:[
ChildComponent
],
所以我需要做什么才能在管理模块中识别 child 组件?我需要导入组件吗?我已经试过了,但没用...
根据您在问题中提供的模块结构,我理解的思路是:
改为在其模块 (CoreModule) 中声明和导出您的子组件 AppModule 的。
然后将这个模块导入到管理模块中。
我已经创建了 this example,您可以在其中看到它的工作原理。 https://stackblitz.com/edit/angular-ebetqi
Angular 文档非常好,看看这两个与模块相关的资源以及如何构建它们...