【发布时间】:2019-09-06 11:00:49
【问题描述】:
我有一个来自父组件的对象,也收到类似这样的子组件:
{
attribute: 'aaaa',
attribute2: [
{
value
},
{
value
},
{
value
},
]
}
此对象是来自父组件的@Input。当我对 attribute2 数组中的对象进行更改时,我希望子组件检测到已进行更改然后进行更新。由于这是一个对象,我无法让它工作,所以我将整个对象 (this.objet = _.cloneDeep(this.object) 克隆到父组件中,以便子组件检测到发生了更改。
有没有其他方法可以不克隆整个对象?提前致谢
编辑:
子组件
export class ChildComponent implements OnInit, OnChanges {
@Input() public object: any;
}
html
<div>
<span>{{object.attribute}}</span>
<div *ngFor="let items of object.attribute2">{{item.value}}</div>
</div>
父组件
export class ParentComponent implements OnInit {
public object: any;
updateObject() {
this.object.attribute2[1] = 'Changed value';
this.object = _.cloneDeep(this.object);
}
}
html
<div>
<child-component [object]="object"></child-component>
</div>
【问题讨论】:
-
你能展示你的模板吗?你是怎么使用的?
-
@legin 使用它来获得更改的价值
@Input() set Inputname(value: number) { console.log(value); } -
您提供的代码 sn-ps 并不能真正使用。例如您的示例对象有一个没有有效语法的对象数组,而您的
updateObject-function 用字符串替换了这些对象。并且您的ngfor创建了一个名为items的变量,但您尝试读取item的值 - 如果您将包含该值的对象替换为字符串,则作为没有 @987654335 的原始类型@-property 也可以。请提供一个最小的、可重现的示例来展示错误,例如StackBlitz。
标签: javascript angular typescript