首页 > 解决方案 > 当我尝试访问 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 值?

标签: angularobservablerxjs6

解决方案


您需要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 );
    });
}

推荐阅读