我有一个带有Angular前端的Elctron应用程序。你可以把Electron看作是Chromium Web浏览器,基本上我们在Chromium Web浏览器上运行我们的Angular应用程序,但在桌面窗口中。
在我的应用程序组件,我已经输入框和确定按钮,所以当用户按下确定按钮,我在整个窗口上显示非原因组件。我直接在electron中加载这个组件,例如我们直接在浏览器中输入URL:loclhost:4200/loclhost输入
我想将应用程序组件输入共享到data-input组件中,所以我编写了以下DataService,但它不工作,我不知道为什么它不工作。还有其他方法可以将数据从应用程序组件传递到数据输入组件吗?
代码:DataService 1:
import { Injectable } from '@angular/core';
import { BehaviorSubject, Observable, Subject } from 'rxjs';
@Injectable({
providedIn: 'root',
})
export class DataService {
private message: string = '';
constructor() {}
changeMessage(newMessage: string) {
this.message = newMessage;
}
getMessage(): string {
return this.message;
}
}
数据服务2:
import { Injectable } from '@angular/core';
import { BehaviorSubject, Observable } from 'rxjs';
@Injectable({
providedIn: 'root'
})
export class DataService {
// Use BehaviorSubject to handle the data and allow components to subscribe to changes
private dataSource = new BehaviorSubject<any>(null);
// Expose the BehaviorSubject as an Observable for components to consume
currentData: Observable<any> = this.dataSource.asObservable();
constructor() {}
changeData(data: any): void {
this.dataSource.next(data);
}
getCurrentData(): any {
return this.dataSource.value;
}
}
1条答案
按热度按时间ldfqzlk81#
你的问题可能取决于你如何在Observable-input组件中获取数据,但我还是建议使用DataService 2示例,但改为使用observable而不是private subject变量。所以你并不需要
getCurrentData
方法,你只需要在prompt-input
组件中订阅的currentData$
observable。这样,无论app-component
何时调用changeData
方法并发出新值,您都将在prompt-input
组件中接收它。希望这个答案对你有帮助。另外,作为一个好的实践,最好避免使用
any
作为返回类型,最好尽可能提供确切的返回类型。