typescript Angular 8 @输出EventEmitter不允许发射对象

8ehkhllq  于 2023-01-14  发布在  TypeScript
关注(0)|答案(5)|浏览(120)

我如何发出一个对象而不是原始数据类型?
我有一个对象const amount = { currenty: 'USD', total: '10.25' };,我想将其发送到父组件。

export class MyChildComponent implements OnInit {
     @Output() childEventEmitter: EventEmitter = new EventEmitter();
....
}

在发射器功能中
this.childEventEmitter.emit(amount);//不工作
错误:类型{ currenty:'美元',总计:“10.25”}不能赋给字符串类型的参数

jobtbby3

jobtbby31#

我是在找到此解决方案"Type 'EventEmitter' is not generic" ERROR in angular后回答自己的问题
问题是我是从量角器而不是@angular/core导入EventEmitter的;谢谢你的评分

vpfxa7rd

vpfxa7rd2#

@Output() childEventEmitter: EventEmitter<{currenty: string, total: string}> = new EventEmitter<{currenty: string, total: string}>();
ujv3wf0j

ujv3wf0j3#

这是因为Typescript抱怨类型不兼容。

@Output() childEventEmitter = new EventEmitter<{currenty: string, total: string}>();

@Output() childEventEmitter = new EventEmitter<any>();
fhity93d

fhity93d4#

简单的方法是通过事件传递任何类型的参数。

@Output() childEventEmitter: EventEmitter<any> = new EventEmitter<any>();
6jjcrrmo

6jjcrrmo5#

把我的场景放在这里,以防有人遇到同样的问题。
我的问题与此类似,但我尝试直接从HTML调用Output回调,如下所示:

子组件
...
 @Output() isCategorySelected: EventEmitter<any> = new EventEmitter<any>();
子组件HTML
<option *ngFor="let category of todoCategories" [value]="category"
                    [selected]="isCategorySelected(category)">{{category}}
                </option>
父组件HTML
<app-child (isCategorySelected)="myCategorySelectorFunc($event)"></app-child>

溶液

正如你可能看到的问题是int的子组件我必须有另一个方法在该组件中,并调用它的输出,如下所示:

...
 @Output() isCategorySelected: EventEmitter<any> = new EventEmitter<any>();

 public onCategorySelected(category: string): void {
    this.isCategorySelected.next(category);
 }
子组件HTML
<option *ngFor="let category of todoCategories" [value]="category"
                    [selected]="onCategorySelected(category)">{{category}}
                </option>
    • 或**
<option *ngFor="let category of todoCategories" [value]="category"
                    [selected]="isCategorySelected.next(category)">{{category}}
                </option>

结论

记住EventEmitter,BehaviorSubject,Subject不能作为HTML中的方法直接调用。

相关问题