[英]Angular 5 setter over the @Input doesn't work
我有一个基于Angular 5的项目。可以说我有两个组件: ParentComponent
和ChildComponent
。 ChildComponent
具有带有@Input()
装饰器的公共设置器。 我将其父组件的属性赋予它,稍后将对其进行更改。
我的问题是-此设置器不适用于Maps,Interfaces,Objects等对象
{ [ key: string ]: boolean }
仅与数组和基元一起使用。
好吧,它有效,但是只有一次。
我已经了解数据类型,但谁能给出很好的解释或链接到文档? 在docs的Angular网站上找不到允许的数据类型。
怎么了
如果有人需要的话,链接到矮人: https ://plnkr.co/edit/WBS55F3wZSYI0qGNEGSd?p = preview
如您所见,有3个设置器,它们是第一次使用,然后只有数组和字符串设置器起作用。 为什么?
更新:如果我通过已存在的键更改Map中的某些值,则看起来可以使用,但是如果添加新的key => value对,则无法使用。
字段mapItemsData
和arrayItemsData
都仅设置一次。 每次对象引用更改时都会设置stringItemData
字段,这是因为它是字符串类型并且字符串是不可变的。 行this.stringItem += this.iterationValue.toString();
实际上,每次调用时都会创建一个新的字符串引用,这将导致子组件的setter用新值再次调用。
之所以看不到mapItemsData
的数据正在更新,是因为无法使用*ngFor
进行迭代,但是如果将其添加到模板中,则可以看到同一对象已更新。
{{mapItems.size}}
如果您想迭代Map
集合,则可以使用entry()进行 。
<div *ngFor="let item of mapItems.entries()">{{ item }}</div>
您还需要更改设置代码,这样您就不必指向其他(新)实例,而是指向父(包含)组件中引用的同一实例。
public set mapItemsData(set: Map<string, boolean>) {
// this.mapItems = []; <- you were changing the reference here
this.mapItems = set; // this is really all you need
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.