javascript - 动态复选框的Angular 4触发事件
问题描述
我创建了一个 div 元素和动态复选框以及更改功能。但是在单击复选框时,不会调用该函数
我的代码
@Component({
selector: 'Dropdown',
template: `<div class="select">
<div class="selectBox" (change)="Checkboxes()">
<select multiple>
<option id='Option' (click)='Click()'>Select an option</option>
</select>
</div>
<div id="checkboxesdiv">
</div></div>`
})
在ngOnInit 中,我用动态值声明了字符串并分配给模板的 innerHtml
let option = "";
for(let item of DBdata){
option += "<label for='" + item.id+ "' title='" + item.des+ "'><input class='Optioninputclass' (change)='ChangeFn()' type='checkbox' id = '" + item.id+ "'/>" + item.des+ "</label>"
}
var select = document.getElementById("checkboxesdiv");
select.innerHTML = this.optionValue;
单击复选框时未调用ChangeFn 。我也试过了(click)='ChangeFn()'
,但结果一样。提前致谢。
解决方案
Angular 模板是在构建过程中编译的。当您通过 innerHTML 动态设置内容时,您不能使用角度语法(或者您可以,但它只是被忽略)。您应该做的是使用 *ngFor 在模板中创建检查框。
@Component({
selector: 'Dropdown',
template: `<div class="select">
<div class="selectBox" (change)="Checkboxes()">
<select multiple>
<option id='Option' (click)='Click()'>Select an option</option>
</select>
</div>
<div id="checkboxesdiv">
<label [for]="item.id" [title]="item.des" *ngFor="let item of DBdata">
<input class="Optioninputclass" (change)="ChangeFn()" type="checkbox" [id]="item.id"/>{{ item.des }}
</label>
</div>
</div>`
})
只要确保 DBdata 是组件中的公共字段,模板就可以访问它。
推荐阅读
- kubernetes - 节点端口的 K8s 入口。初学者示例
- javascript - 如何使通过 useState 钩子改变状态的函数可重用?
- javascript - 将大文件(更多 2GB)转换为 base64 字符串转换时浏览器断开连接
- c# - SendKeys.SendWait(" "); 抛出 StackOverFlowException
- javascript - 如何在 jQuery 中仅提取 window.location.pathname 的最后一部分?(内有详细说明)
- r - 更新R中等效列的表
- c++ - 我可以继承 std::string 以添加一些额外的成员/标志吗?
- swift - Swift: Dismiss a FormViewController in Eureka-forms
- javascript - 这段代码如何运行改变检测角度?
- oracle - AWS lambda - 如何从 lambda 连接内部 oracle 实例(比如 VPN / 内部办公网络)