angular - 当我尝试访问 Object 键值时,如何正确使用 Observable 以免出错?
问题描述
这是组件
export class ButtonGroupComponent implements OnInit {
@Input() items: Array<Object>;
constructor(private el: ElementRef) {
}
ngOnInit(){
console.log('this.constructor.name ' + this.constructor.name);
console.log(this.items);
}
onParentClick(index) {
let items = this.items;
Observable.of(items).subscribe(items => {
this.el.nativeElement.dispatchEvent(new CustomEvent(items[index].eventName, {}));
console.log( items[index].eventName );
});
}
这是模板:
<custom-button *ngFor="let el of items ; let i = index"
type="{{el.type}}"
btnName="{{el.btnName}}"
btnIcon="{{el.btnIcon}}"
disabled="{{el.disabled}}"
(childClickEvent)="onParentClick($event)"
[index]="i"
[item]="item"
>
</custom-button>
'items' 是一个对象数组,它来自 pt-button-group 的主机,并描述了页面将具有什么样的按钮。
为了知道组中的哪个按钮已被单击,组件调度与单击的按钮相对应的对象的索引以及该按钮的事件名称的描述。
当我编译时,我得到了两次错误:
error TS2339: Property 'eventName' does not exist on
type 'Object'
但这怎么可能?Observables 应该是同步的吧?我写错了 Observable 吗?如何在不出错的情况下获取 eventName 值?
解决方案
您需要items
使用any
:
onParentClick(index) {
let items = this.items;
Observable.of(items).subscribe((items: any) => { //<======= here you can set any
this.el.nativeElement.dispatchEvent(new CustomEvent(items[index].eventName, {}));
console.log( items[index].eventName );
});
}
推荐阅读
- python - 使用 glob 排除子文件夹
- postgresql - Postgres 在“A OR exists(B)”查询中进行优化
- csv - 如何在 GoogleShell 中使用 gsutil compose 并跳过第一行?
- javascript - Shopify - 购买免费产品
- javascript - 将 Azure Cosmos 表值转换为 HTML
- voltdb - 如何限制voltdb使用的内存
- python - Sqlalchemy 插入“?” 在 where 子句中
- laravel - 更改错误包中消息的密钥?
- c# - 在 WebAPI 中为 int 的情况下覆盖消息“值 {0} 对于 {1} 无效”
- java - 无法在 Eclipse 中从 wsdl 和 xsd 文件生成 java 文件