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>";