gpt4 book ai didi

javascript - 如何使用没有 `strictTemplates` 的自定义事件(不是事件发射器)来提示 `$event` 不是自定义事件类型?

转载 作者:行者123 更新时间:2023-12-04 11:39:09 24 4
gpt4 key购买 nike

我创建了一个 Angular 库,名为 Angular-Slickgrid ,它是 SlickGrid 的包装器,它是一个旧的 JavaScript/jQuery 库,我可以使用 SlickGrid 发送的任何自定义事件,没有任何问题,如下所示(此时一切都很好)

<angular-slickgrid gridId="grid28"
[columnDefinitions]="columnDefinitions"
[gridOptions]="gridOptions"
[dataset]="dataset"
(onSelectedRowsChanged)="handleOnSelectedRowsChanged($event.detail.eventData, $event.detail.args)">
</angular-slickgrid>
一切都很好,一切正常
handleOnSelectedRowsChanged(event: any, args: OnSelectedRowsChangedEventArgs) {
console.log(args);
}
在我的库中,我只是使用具有以下代码的小函数来调度这些事件
/** Dispatch of Custom Event, which by default will bubble & is cancelable */
dispatchCustomEvent(eventName: string, data?: any, isBubbling: boolean = true, isCancelable: boolean = true) {
const eventInit: CustomEventInit = { bubbles: isBubbling, cancelable: isCancelable };
if (data) {
eventInit.detail = data;
}
return this.elm.nativeElement.dispatchEvent(new CustomEvent(eventName, eventInit));
}
一切都很美好,生活很美好……
启用 strictTemplates 时会中断
当我决定启用 strictTemplates进入 angularCompilerOptions那是 Angular 开始提示 $event 的时候。作为一个类型 Event它提示 detail不是有效属性,但在我的实现中它不是 Event 类型,应检测为类型 CustomEvent .
为什么 Angular 没有将其检测为 CustomEvent ?有什么方法可以强制将类型检测为 CustomEvent或覆盖类型为 CustomEvent没有Angular提示?
到目前为止,我发现绕过这些错误的唯一(丑陋)方法是让它认为它是一个类型 Event但随后将其转换回 CustomEvent这可行,但它添加了太多不方便的代码
<angular-slickgrid gridId="grid28"
[columnDefinitions]="columnDefinitions"
[gridOptions]="gridOptions"
[dataset]="dataset"
(onSelectedRowsChanged)="handleOnSelectedRowsChanged($event)">
</angular-slickgrid>
然后施放 EventCustomEvent即使这可行,它也会添加很多不方便的代码
handleOnSelectedRowsChanged(event: Event) {
const args = (event as CustomEvent).detail.args as OnSelectedRowsChangedEventArgs;
console.log(args);
}
我不想也不能使用 Event Emitter,因为这些事件是动态的,而且因为这些事件来自 JavaScript 库,还有其他技术原因,但我还是不能使用 Event Emitter。
enter image description here
这可以通过 Angular 指令解决吗?我见过另一个 SO Angular 4 trigger custom event - EventEmitter vs dispatchEvent()这条路线有点走,但我仍然不确定该怎么做。

最佳答案

使用 $any()禁用 的类型检查的函数$事件 可能会绕过这个错误。

<angular-slickgrid gridId="grid28"
[columnDefinitions]="columnDefinitions"
[gridOptions]="gridOptions"
[dataset]="dataset"
(onSelectedRowsChanged)="handleOnSelectedRowsChanged($any($event))">
</angular-slickgrid>

关于javascript - 如何使用没有 `strictTemplates` 的自定义事件(不是事件发射器)来提示 `$event` 不是自定义事件类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68490848/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com