【问题标题】:Angular 5 - dynamically attaching click event to dynamically created domAngular 5 - 将点击事件动态附加到动态创建的dom
【发布时间】:2018-12-05 07:20:23
【问题描述】:

我已经在墙上敲了 2 天,只是为了将一个点击事件附加到一个动态创建的按钮上。 (click)、ng-click、on-click 指令不适用于动态 dom,因为这些指令需要编译。

我有这个要求来创建动态 html 元素(按钮是一个),但不知何故我被困在如何附加事件上。在 onClick 上调用 ts 方法也不行。

我四处寻找,但无济于事。如果有人能解释一下,不胜感激。

我正在考虑切换到其他框架,因为我发现 Angular 缺少与动态 dom 的事件绑定。我已经厌倦了寻找任何可以做的事情,但没有。

请帮忙。

【问题讨论】:

标签: angular events dynamic click


【解决方案1】:

我使用 ngFor/ngRepeat 解决了我自己的问题。诀窍是首先声明 ngModel 变量以用于动态 dom,最好是数组。

在我的例子中,我需要一个通过添加新标签按钮动态生成的迭代键值对。这是代码sn-p。

<div *ngFor="let tag of resourceTags; index as i" [attr.data-index]="i">
                        <div class="col-sm-5"><input type="text" class="form-control" required="" [(ngModel)]="tag.key" value="{{tag.key}}" placeholder="tag key" /></div>
                        <div class="col-sm-5"><input type="text" class="form-control" required="" [(ngModel)]="tag.value" value="{{tag.value}}" placeholder="tag value" /></div>
                        <div class="col-sm-2" style="padding-top:7px;"><i class="fa fa-minus-circle fa-lg" style="cursor:pointer;" (click)="removeTag(i)"></i></div>
                        <div class="col-sm-12" style="height:5px;">&nbsp;</div>
                    </div>
                    <div class="col-sm-2"><button type="button" class="center btn btn-info btn-xs" (click)="addNewTag()">add new tag</button></div>
                    <div class="col-sm-10">&nbsp;</div>

其中resouceTags定义为数组变量[{'key':'some key', 'value':'some value'}, ...]

只要变量内容发生变化,Angular 就会自动渲染指定的 ngFor 元素。

addNewTag() 只会向resourceTags 添加一个元素,而removeTag 则相反。

我太笨了,之前没有想到这个。

【讨论】:

  • 你可以为上述解释创建一个小提琴或类似的东西
猜你喜欢
  • 2016-07-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多