类型“元素”不存在属性“ onclick”

时间:2019-12-15 18:58:55

标签: angular typescript

我有以下角度成分

import { Component, OnInit } from '@angular/core';

@Component({
  selector: 'app-status',
  templateUrl: './status.component.html',
  styleUrls: ['./status.component.css']
})
export class StatusComponent implements OnInit {

  constructor() { }

  ngOnInit() {
    const acc = document.getElementsByClassName('accordion');
    let i;
    for (i = 0; i < acc.length; i++) {
        acc[i].onclick = function() {
            this.classList.toggle('active');
            this.nextElementSibling.classList.toggle('show');
      };
    }
  }

}

我正在从编译器中检索以下错误

src / app / components / status / status.component.ts(16,16)中的错误:错误TS2339:类型“元素”上不存在属性“ onclick”。

尽管编译成功,并且一切正常。

我应该忽略该错误吗?

2 个答案:

答案 0 :(得分:1)

您需要将其投射到HTMLElement

const acc: HTMLElement = document.getElementsByClassName('accordion') as HTMLElement;

答案 1 :(得分:0)

如上述用户所述,您必须将其强制转换为HTMLElement,但必须位于for循环内。我没有发表评论的声誉,这就是为什么我再次回答。

  ngOnInit() {
    const acc = document.getElementsByClassName('accordion');
    let i;
    for (i = 0; i < acc.length; i++) {
        HTMLElement(acc[i]).onclick = function() {
            this.classList.toggle('active');
            this.nextElementSibling.classList.toggle('show');
      };
    }
  }

或者如果您仍然使用“ document.getElementsByClassName”,我宁愿建议使用“ addEventListener”函数。

  ngOnInit() {
    const acc = document.getElementsByClassName('accordion');
    let i;
    for (i = 0; i < acc.length; i++) {
        acc[i].addEventListener("click",function() {
            this.classList.toggle('active');
            this.nextElementSibling.classList.toggle('show');
      });
    }
  }