在角度上下文之外使用html和香草javascript
我有一个angular应用程序,其中包含一个非常简单的wysiwyg编辑器组件: component.html在角度上下文之外使用html和香草javascript,javascript,html,angular,performance,change-detector-ref,Javascript,Html,Angular,Performance,Change Detector Ref,我有一个angular应用程序,其中包含一个非常简单的wysiwyg编辑器组件: component.html <textarea [id]="editorId"></textarea> 我使用了一个javascript库,在本例中我将其简化为editorLibrary,editorLibrary是一个全局js变量,我可以在其上执行初始化编辑器之类的操作。我需要忽略ts,因为我不只是在这个组件中导入它 这一切都很好,除了初始化编辑器后,渲染突然变得非
<textarea [id]="editorId"></textarea>
我使用了一个javascript库,在本例中我将其简化为editorLibrary,editorLibrary是一个全局js变量,我可以在其上执行初始化编辑器之类的操作。我需要忽略ts,因为我不只是在这个组件中导入它
这一切都很好,除了初始化编辑器后,渲染突然变得非常慢。当我更改一个值时,其他组件只会在几秒钟后重新渲染,而之前的更改是即时的
我的理论是,wysiwyg编辑器库在我的textarea旁边生成第二个html元素,它有很多子元素,我认为angular会在发生变化时解析所有这些元素,这会减慢它的速度
有没有办法告诉angular完全忽略编辑器生成的元素?因为它都是香草js,所以我不需要任何变更检测或变量替换,我认为如果angular完全忽略这些元素,我的性能会提高。我已经尝试过changeDetectorRef.detach()和zone.runOutsideAngular(),并尝试使用elementRef添加元素,而不是直接在html文件中添加。渲染仍然非常慢
然而,用户界面并不滞后,但在更改变量后从angular进行更新只需花费大量时间。有没有其他方法来调试原因?(可能是高级日志级别,在这里我可以看到angular在后台做什么)或者有人知道我如何告诉angular“这个html是纯js的,你不需要查看、解析、更改甚至知道它在那里”你能创建一个stackblitz吗?或者一个链接到一个我很乐意帮助的例子。我看到你已经玩过检测属性了,我仍然会看OnPush策略。你能创建一个stackblitz吗?或者链接到一个我很乐意帮助的示例。我看到您已经使用了检测属性,但我仍将介绍OnPush策略。
editorId: string;
constructor() {
this.editorId = Math.random().toString(36).substring(2, 15);
}
ngAfterViewInit(){
// @ts-ignore
editorLibrary.init(this.editorId);
}