gpt4 book ai didi

javascript - 如何在 Angular 6 中动态创建的按钮上绑定(bind)单击事件?

转载 作者:行者123 更新时间:2023-12-03 01:11:05 24 4
gpt4 key购买 nike

我正在尝试创建一个带有 onclick 事件的动态按钮。 showname() 在同一 Component.ts 上定义。但点击按钮没有任何反应

Component.ts

createtooltip() {
this.tooltip = document.createElement('div');
this.tooltip.style.cssText =
'position:absolute; background:black; color:white; padding:4px;z-index:10000;' +
'border-radius:2px; font-size:12px;box-shadow:3px 3px 3px rgba(0,0,0,.4);' +
'opacity:0;transition:opacity 0.3s';
this.tooltip.innerHTML = '<button id="popup" (click)="showname()" >Copy!</button>';
document.body.appendChild(this.tooltip);
}

showname() {
console.log("Hi User");
}

谁能帮我找到解决办法吗?

最佳答案

您无法在任何地方访问文档对象。

因此,您不应该使用 document 函数来执行 DOM 操作。所有这些 DOM 操作都应该仅使用 Rendere2 来完成。如果您想在 DOM 上访问任何内容,您应该使用 @ViewChild

这是一个例子:

import { Component, Renderer2, ElementRef, ViewChild } from '@angular/core';

@Component({
selector: 'my-app',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css']
})
export class AppComponent {
name = 'Angular';
@ViewChild('tooltip') tooltip: ElementRef;

constructor(private renderer: Renderer2) {}

createtooltip() {
this.renderer.setAttribute(this.tooltip.nativeElement, 'class', 'my-button');

const button = this.renderer.createElement('button');
this.renderer.setProperty(button, 'id', 'popup');
this.renderer.setProperty(button, 'innerText', 'Copy');
this.renderer.listen(button, 'click', (event) => {
this.showname();
})

this.renderer.appendChild(this.tooltip.nativeElement, button);
}

showname() {
console.log("Hi User");
}

}

在模板中:

<button (click)="createtooltip()">Create Tooltip</button>

<div #tooltip>

</div>

在 CSS 中:

p {
font-family: Lato;
}

.my-button {
position:absolute;
background:black;
color:white;
padding:4px;
z-index:10000;
border-radius:2px;
font-size:12px;
box-shadow:3px 3px 3px rgba(0,0,0,.4);
opacity:0;
transition:opacity 1s linear;
}

这是一个Sample StackBlitz供您引用。

关于javascript - 如何在 Angular 6 中动态创建的按钮上绑定(bind)单击事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52204399/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com