使用@HostListener
显式键入的事件参数TouchEvent
,会导致Firefox崩溃,并显示以下错误消息:
ReferenceError:未定义TouchEvent.
一个例子:
@HostListener('touchstart', ['$event']) // or 'touchend', 'touchmove'
onTouchStart(e: TouchEvent): void {}
Run Code Online (Sandbox Code Playgroud)
我可以想出几种方法来自行预防:
e: TouchEvent | any
或e: any
(或根本不指定类型)elRef.nativeElement.addEventListener('touchstart', (e: TouchEvent) => {})
Observable.fromEvent(elRef.nativeElement, 'touchstart').subscribe((e: TouchEvent) => {})
但是使用any
或| any
看起来像是一个黑客,而另外两个选项没有利用框架.是否有另一种更好,更安全的方法来处理这个问题,如果没有,哪种选择更可取?
(也许有人也可以解释Angular实际在做什么以及为什么只有当事件被明确地输入为TouchEvent
... 时才会发生此错误)
编辑:这个问题仍然存在于Angular 7中.编辑:这个问题在Angular 6中已得到明确解决.
设置:带有库的 Angular 9 工作区、一个使用 CDK 的测试应用程序和故事书_overlay.scss
,.scss
文件中包含@use
.
.storybook/
node_modules/
projects/
- library/
- src/
- lib/
- component/
component.scss // `@use`s `_overlay.scss`
ng-package.json
- test-app/
angular.json
Run Code Online (Sandbox Code Playgroud)
问题:当@use "~@angular/cdk/overlay"
在测试应用程序和故事书编译中使用覆盖 sass 混合但 ng-packagr 找不到_overlay.scss
.
ERROR: Can't find stylesheet to import.
?
2 ? @use "~@angular/cdk/overlay";
? ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
?
projects\library\src\lib\component\component.scss 2:1 root stylesheet
An unhandled exception occurred: Can't find stylesheet to import.
Run Code Online (Sandbox Code Playgroud)
解决方法:
node_modules/
tong-package.json
的"styleIncludePaths": "["../../node_modules"]"
数组并像这样导入覆盖混合,@use …