Angular 如何修改DOM?
想象一下这个模板Angular 如何修改DOM?,angular,mutation-observers,Angular,Mutation Observers,想象一下这个模板 <ul> <li *ngFor="random"></li> </ul> 现在,每次渲染此模板时,观察者都会做出正确的反应。 但当我“手动”修改内容时,它不会: this.el.innerHTML=“另一项””; 这可能是因为Angular有更聪明的方法来修改DOM 但是Angular到底是如何做到的呢?在一行代码中?尤其是“characterData”更改正在被触发?正如@wOxxOm所说的,如果您使用charact
<ul>
<li *ngFor="random"></li>
</ul>
现在,每次渲染此模板时,观察者都会做出正确的反应。
但当我“手动”修改内容时,它不会:
this.el.innerHTML=“另一项” ”;
这可能是因为Angular有更聪明的方法来修改DOM
但是Angular到底是如何做到的呢?在一行代码中?尤其是“characterData”更改正在被触发?正如@wOxxOm所说的,如果您使用
characterData:true
选项,则仅当您指定给元素的文本节点的nodeValue时,才会触发更改
Angular将#注释节点用于嵌入视图
angular会给这个节点分配一些元信息
这会触发MutationObserver中的更改。如果您使用的是一个处理DOM更改的框架,我看不出自己观察DOM更改的意义……您有太多的方法来监听DOM的角度更改,考虑使用一个而不是一个突变obsRel.Primile数据在分配给一个元素的文本或属性节点的NoDeVald时被触发-这是一个比内层HTML更有效的改变DOM的方法,尤其是在低端设备即移动浏览器上。如果你把这个作为你的答案,我会接受的。所以巧合的是,
characterData:true
被触发了?这意味着如果角度不再决定不再使用注释,那么观察者就不会再做出反应了吗?是的,角度考虑不要在角常春藤中使用它,但是它被放弃了,所以它将使用注释节点来嵌入视图。
observer.observe(this.el, { characterData: true, subtree: true });
this.el.innerHTML = "<li>Another item</li>";