Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/449.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在角度上下文之外使用html和香草javascript_Javascript_Html_Angular_Performance_Change Detector Ref - Fatal编程技术网

在角度上下文之外使用html和香草javascript

在角度上下文之外使用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,因为我不只是在这个组件中导入它 这一切都很好,除了初始化编辑器后,渲染突然变得非

我有一个angular应用程序,其中包含一个非常简单的wysiwyg编辑器组件:

component.html

<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);
}