javascript - 使用内部 document.addEventListener() 属性时模型的 Angular 不会改变

标签 javascript angular document

我正在尝试在 document.getElementById('source-selection').addEventListener 内点击时更新我的​​模型名称 this.name。不知道为什么当该函数内的简单警报触发时,它不会改变。 我也对 ngOnChanges 进行了相同的尝试。

ngOnInit() {
      document.getElementById('source-selection').addEventListener('click', function (evt: any) {
       alert('test');
       this.name = `My Angular Test On Click`;
    });
   }
    ngOnChanges() {
      document.getElementById('source-selection').addEventListener('click', function (evt: any) {
       alert('test');
       this.name = `My Angular Test On Click`;
    });
   }

请找到骗子链接here进行实验

最佳答案

在您的代码中,回调函数中的“this”不是组件的实例。它已被更改,因为每个新函数都定义了自己的“this”值。

解决方案是使用箭头函数自动将“this”绑定(bind)到函数:

document.getElementById('source-selection').addEventListener('click',  (evt: any) => {
   this.name = `My Angular Test On Click`;
});

在箭头函数中,使用封闭执行上下文的 this 值。更多详情here .

关于javascript - 使用内部 document.addEventListener() 属性时模型的 Angular 不会改变,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47182720/

相关文章:

javascript - Ajax页面,facebook的FB.init()导致所有ajax请求发生两次?

javascript - jQuery/CSS 栏百分比在 Rails 应用程序中不起作用

javascript - 如果我的网站通过 iframe 打开第 3 方网站,第 3 方网站能否成功设置自己的 cookie?

javascript - webpack 4.1.1 -> configuration.module 有一个未知的属性 'loaders' 。

angular - 如何使用引导导航栏和下拉菜单(使用 Angular 7)?

Angular2 :getting event. 目标值

Angular 2,在 ngFor 中使用带有条件的 ngClass

java - 如何替换文本 html 以转换为 pdf? java

ios - 如何让我的应用程序显示在“打开于...”菜单中。加速器

javascript - 如何从文档对象访问窗口对象