electron 为什么共享服务不能处理没有父子关系的组件

jhdbpxl9  于 2023-10-14  发布在  Electron
关注(0)|答案(1)|浏览(136)

我有一个带有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;
  }
}
ldfqzlk8

ldfqzlk81#

你的问题可能取决于你如何在Observable-input组件中获取数据,但我还是建议使用DataService 2示例,但改为使用observable而不是private subject变量。所以你并不需要getCurrentData方法,你只需要在prompt-input组件中订阅的currentData$ observable。这样,无论app-component何时调用changeData方法并发出新值,您都将在prompt-input组件中接收它。希望这个答案对你有帮助。
另外,作为一个好的实践,最好避免使用any作为返回类型,最好尽可能提供确切的返回类型。

相关问题