微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

javascript – 更新视图(DOM)后的调用方法(在Angular 2中)

假设我有以下指令:

import {Directive, Input, OnChanges } from '@angular/core'

@Directive({
  selector: 'select[my-select]'
})
export class NbSelect implements OnChanges {

  @input() ngModel;

  constructor() {
  }

  ngOnChanges(changes) {
    doSomeStuffAfterViewIsUpdated();
  }

  doSomeStuffAfterViewIsUpdated() {
    console.log(jQuery('select[my-select]').val()); // this should write the new value
  }
}

我在模板中的某个地方使用它:…< select my-select [(ngModel)] =“someReference”> …

在某些时候,我更改了组件中someReference的值:someReference =“newValue”

现在发生了什么:在更新DOM之前调用doSomeStuffAfterViewIsUpdated函数.这意味着控制台显示选择的旧值.

我想要的:在DOM更新DOM之后应该调用doSomeStuffAfterViewIsUpdated函数,因此控制台显示“newValue”.

我应该使用什么而不是ngOnChanges来使它像我想要的那样工作?

请注意,重要的是代码应该在DOM更新后运行.问题不在于如何访问元素的新值.

谢谢!

解决方法:

我参加聚会有点晚了,但由于我有类似的问题和可能的解决方案,我想我会分享

你要找的是MutationObservers(CanIUse);
我用类似于此的指令解决一个非常类似的问题(简化为……简单?:P):

ngOnChanges() {
    this.observer = new MutationObserver(() => { this.methodToCall() });
    this.observer.observe(this.elRef.nativeElement, this.observerOptions); // See linked MDN doc for options
}

private methodToCall(): void {
    this.observer.disconnect();
}

ngOnDestroy() {
    if(this.observer) { 
        this.observer.disconnect(); 
        this.observer = undefined;
    }
}

当在DOM中修改属性,子等等(或添加,删除等)时,将触发MutationObserver回调

根据您的使用情况,您可能根本不需要ngOnChanges,它也会使代码更清洁.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐