【问题标题】:Angular valuechange not noticed in HTMLHTML中未注意到角度值更改
【发布时间】:2020-10-10 19:32:49
【问题描述】:

在我的应用程序中,我有一个回调函数,它等待电子数据发送回 Angular,然后显示更改。我可以更改值,但在 HTML 文件中没有注意到。所以显示了错误的数据。

component.ts 中的函数:

    public async startDefault(): Promise<void> {
        try {
            this.oDefaultLoader.startLoading();
            this.setNewvalues("api", {
                max: 1,
                cur: 0
            });
            setTimeout((): void => {
                this.setNewvalues("api", {
                    max: 19,
                    cur: 5
                });
            }, 6000);
            await this.electron.sendIpcPipe("startDefault", async (oData: IIpcChainResponse): Promise<void> => {
                console.log(oData);
                this.setNewvalues("api", {
                    max: oData.max,
                    cur: oData.cur
                });

            }, this.settings.oSetting);
            this.oDefaultLoader.stopLoading();
        } catch (oErr) {
            this.oDefaultLoader.stopLoading();
            console.log(oErr);
        }
    }

    // Background Actions
    private setNewvalues(sSet: "api" | "bo", oValues: IProgressObject): void {
        this.oDefaultStart = deepMergeObject(this.oDefaultStart, {
            [sSet]: oValues
        } as IDefaultStart);
        console.log(this.oDefaultStart.api);
    }

sendIpcPipe 函数:

    public async sendIpcPipe<T, U>(sEndpoint: string, fnPipe: (data: T) => Promise<void>, oArgs?: U): Promise<void> {
        if (this.electron.isElectronApp) {
            return new Promise<void>((resolve: Function, _reject: Function): void => {
                const oListener: (_event: Electron.IpcRendererEvent, oResponse: T) => Promise<void> = async (
                    _event: Electron.IpcRendererEvent,
                    oResponse: T
                ): Promise<void> => {
                    if (oResponse as unknown as number === 0) {
                        this.electron.ipcRenderer.off(sEndpoint + "Response", oListener);
                        resolve();
                    } else {
                        await fnPipe(oResponse);
                    }
                };
                this.electron.ipcRenderer.on(sEndpoint + "Response", oListener);
                this.electron.ipcRenderer.send(sEndpoint, oArgs);
            });
        }
        return;
    }

仅用于显示对象的 HTML 代码:

<div>
    {{ oDefaultStart.api | json }}
</div>

更新

如果我在sendIpcPipe 的回调函数之外使用setNewvalues,它工作正常。但在外面什么都没有,或者只是有时发生了一些变化。

【问题讨论】:

  • 查看 Anguar.core 库中的 ChangeDetector 类。特别是 detectChanges 方法。
  • 这没什么用。我不知道我是否应该使用这个“提示”。

标签: angular typescript callback electron


【解决方案1】:

对值变化做出反应的最佳方法是使用 RXJS 的魔法。

我会将 oDefaultStart 设为 BehavioralSubject,然后在 HTML 中使用异步管道。

如果您是 RXJS 新手,请查看这个有用的视频 https://www.youtube.com/watch?v=ewcoEYS85Co

【讨论】:

  • 我试过了,但没有任何改变。仍然可以在 oDefaultStart 中查看基础数据
猜你喜欢
  • 2017-02-17
  • 1970-01-01
  • 1970-01-01
  • 2014-12-07
  • 2017-08-14
  • 2021-02-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多