【发布时间】:2023-05-03 17:37:01
【问题描述】:
我想触发一个按钮单击事件,该函数位于ngOnChanges() 中。但是,当单击按钮时,函数无法在 ngOnChanges() 内部触发。我错过了什么吗?
这是ts文件中的示例代码:
import { Component, OnInit, Input, OnChanges } from '@angular/core';
import { SafeResourceUrl, SafeHtml, DomSanitizer } from '@angular/platform-browser';
declare var $: any;
@Component({
selector: 'sl-page',
template: require('./sl-page.component.html')
})
export class PageComponent implements OnInit, OnChanges {
constructor(
private sanitizer: DomSanitizer
) { }
ngOnInit() {
}
ngOnChanges() {
$(function () {
var btn= document.getElementsByClassName("buttonClass");
var i;
for (i = 0; i < btn.length; i++) {
btn[i].addEventListener("click", function () {
/* Toggle between adding and removing the "active" class,
to highlight the button that controls the panel */
this.classList.toggle("active");
/* Toggle between hiding and showing the active panel */
var panel = this.nextElementSibling;
if (panel.style.display === "block") {
panel.style.display = "none";
} else {
panel.style.display = "block";
}
});
}
});
}
按钮的 html 代码是:
<div class="buttonBlock" tabindex="0">
<button class="buttonClass" type="button">{{"Button"}}</button>
<div class="textClass">this is the text when button is expanded</div>
</div>
【问题讨论】:
-
你想在 ngOnChanges() 中实现什么,你是否尝试过 ngOnInit() 中的块
-
尝试在 ngOnChanges 中触发事件可能会导致无限循环,并且看起来像是反模式。同样从您的代码中,您似乎正在激活事件侦听器,而不是触发事件。
-
@GaneshBabu 我也在 ngOnInit() 内部尝试过,但它也没有触发
标签: html jquery angular typescript addeventlistener