【发布时间】:2021-01-21 15:22:30
【问题描述】:
在工作中我遇到了一个很奇怪的行为。
这里是类似问题的link:stackblitz
从index.html 文件我提出了一些点击事件
function createClause(event) {
Office.context.document.getSelectedDataAsync(
Office.CoercionType.Text,
(asyncResult) => {
window.sendSelectedTextCallback({selectedText: asyncResult.value});
event.completed();
});
}
在app.component.ts 中,我正在监听sendSelectedTextCallback 函数。
(window as any).sendSelectedTextCallback = (params: any) => {
clauseCommunicationService.addClause({name: params.selectedText});
};
clauseCommunicationService.addClause 方法调用 next 函数以获得 subject。
在某些组件中,我正在监听更改。
this.clauseAddedSubscription = clauseCommunicationService.clauseAdded$.subscribe(
(clause) => {
this.clauses.push(clause);
console.log(this.clauses);
}
);
我面临的问题是console.log(this.clauses) 命令向我显示更新的列表,但这并未反映在UI 上。
如果我要替换
(window as any).sendSelectedTextCallback = (params: any) => {
clauseCommunicationService.addClause({name: params.selectedText});
}
与
setTimeout(() => {
clauseCommunicationService.addClause({name: 'helloooo'});
}, 4000);
我可以看到更改反映在 UI 上。
我尝试使用ngZone 和ChangeDetector 功能但没有成功。
【问题讨论】:
-
this.clauses是如何声明的? -
@GetOffMyLawn,
public clauses: any[] = []; -
@GetOffMyLawn,在
onInit方法中,它使用来自server的内容进行初始化 -
模板是什么样的?如果您使用的是第 3 方工具,您可能需要告诉它数据已更改并需要刷新。
-
@GetOffMyLawn,我正在使用一些第 3 方工具。我已经更新了
createClause方法。
标签: javascript angular events