繁体   English   中英

@Input上的Angular 5 setter不起作用

[英]Angular 5 setter over the @Input doesn't work

我有一个基于Angular 5的项目。可以说我有两个组件: ParentComponentChildComponent ChildComponent具有带有@Input()装饰器的公共设置器。 我将其父组件的属性赋予它,稍后将对其进行更改。

我的问题是-此设置器不适用于Maps,Interfaces,Objects等对象

{ [ key: string ]: boolean }

仅与数组和基元一起使用。

好吧,它有效,但是只有一次。

我已经了解数据类型,但谁能给出很好的解释或链接到文档? 在docs的Angular网站上找不到允许的数据类型。

怎么了

如果有人需要的话,链接到矮人: https ://plnkr.co/edit/WBS55F3wZSYI0qGNEGSd?p = preview

如您所见,有3个设置器,它们是第一次使用,然后只有数组和字符串设置器起作用。 为什么?

更新:如果我通过已存在的键更改Map中的某些值,则看起来可以使用,但是如果添加新的key => value对,则无法使用。

字段mapItemsDataarrayItemsData都仅设置一次。 每次对象引用更改时都会设置stringItemData字段,这是因为它是字符串类型并且字符串是不可变的。 this.stringItem += this.iterationValue.toString(); 实际上,每次调用时都会创建一个新的字符串引用,这将导致子组件的setter用新值再次调用。


之所以看不到mapItemsData的数据正在更新,是因为无法使用*ngFor进行迭代,但是如果将其添加到模板中,则可以看到同一对象已更新。

{{mapItems.size}}

如果您想迭代Map集合,则可以使用entry()进行

<div *ngFor="let item of mapItems.entries()">{{ item }}</div>

有关Map类型的更多信息,请参见文档


您还需要更改设置代码,这样您就不必指向其他(新)实例,而是指向父(包含)组件中引用的同一实例。

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM