【发布时间】:2022-01-19 17:58:37
【问题描述】:
我有几个复选框,我将这些复选框值推送到一个数组中。然后我尝试使用 @Input 装饰器从子组件访问这些数据。但是数据甚至没有传递给子组件(不显示console.log)。你能帮我解决这个问题吗?
父组件 (.ts)
public layers: any[] = [];
layerChange(e:any){
var isChecked = e.target.checked;
var id = e.target.attributes.id.nodeValue;
const index = this.layers.findIndex(el => el.id === id);
const layer = {
isChecked: isChecked,
id: id,
}
if(index > -1){
this.layers[index].isChecked = isChecked;
}else{
this.layers.push(layer);
}
console.log(this.layers);
}
.html
<input id="population" (change)="layerChange($event)" type="checkbox">
<input id="age" (change)="layerChange($event)" type="checkbox">
<app-esri-map [layerChange] = "layers"></app-esri-map>
子组件 (.ts)
@Input() layerChange: Array<any>;
console.log(layerChange)
【问题讨论】:
-
你能粘贴更多的子组件吗?我不确定你的控制台在哪里。
-
角度变化检测默认使用对象引用,因此推送到数组或更改数组中的值不会触发任何更改。您需要将
layers设置为一个新实例。 -
是的,您的控制台日志在哪里,这是您问题中最相关的部分之一。
标签: angular parent-child angular-components