Angular2 指令:如何检测 DOM 更改

Posted

技术标签:

【中文标题】Angular2 指令:如何检测 DOM 更改【英文标题】:Angular2 Directive: How to detect DOM changes 【发布时间】:2016-07-07 22:10:12 【问题描述】:

我想将 Skrollr 实现为 Angular2 属性指令。

所以,格式可能是:

<body my-skrollr>
</body>

但是,为了实现这一点,我需要能够检测包含标记(在本例中为

)下的子元素中的 DOM 中的变化,以便我可以调用 skrollr.init()。刷新();并更新库以使用新内容。

是否有一种我不知道的直接方法,或者我的处理方法不正确?

【问题讨论】:

好问题!!! 【参考方案1】:

Angular 没有为此目的提供内置的东西。您可以使用MutationObserver 来检测 DOM 更改。

@Directive(
  selector: '[my-skrollr]',
  ...
)
class MyComponent 
  constructor(private elRef:ElementRef) 

  ngAfterViewInit() 
    this.observer = new MutationObserver(mutations => 
      mutations.forEach(function(mutation) 
        console.log(mutation.type);
      );   
    );
    var config =  attributes: true, childList: true, characterData: true ;

    this.observer.observe(this.elRef.nativeElement, config);
  

【讨论】:

在 MutationObserver 构造函数中,它应该是“mutations”而不是“mutation” 谢谢你...有人能告诉我这会是什么相反的...即检测到没有任何变化吗?如果这是有道理的。大声笑我需要一些东西来关闭变量。 也许您可以检查在特定时间内没有发出任何突变事件? @ChristianMatthew - 您肯定会简单地将状态设置为“false”,然后在发生变化时更改为 true? 别忘了在ngOnDestroy()方法中调用this.observer.disconnect();

以上是关于Angular2 指令:如何检测 DOM 更改的主要内容,如果未能解决你的问题,请参考以下文章

Angular项目实战Angular2的脏值检测机制

绑定到函数时如何触发角度变化检测?

如何检测选择标签(Angular 2)上对 ngModel 的更改?

dom更改时Angular2 setinterval被阻止

如何从 Angular 2 的指令中附加动态 DOM 元素?

在 Angular2 中操作 DOM 的更好方法