angular - 从 Angular-Material 项目中删除 HammerJS
问题描述
我正在使用 Material design 开发一个 Angular 应用程序。最近我在我的一个页面中发现了内存泄漏。每次加载此页面时,初始化/渲染都需要越来越多的时间。
此页面包含一个材料表mat-table
(15 列 x 100 行),mat-tooltip
每个单元格上都有一个材料工具提示。经过一番研究,我了解到内存泄漏是由于工具提示(而不是表格)造成的。
Github 上的一篇文章建议删除 HammerJS 作为修复,请参阅:https ://github.com/angular/material2/issues/4499 。
现在内存不再泄漏,我仍然收到这两个警告:
找不到 HammerJS。某些 Angular Material 组件可能无法正常工作。
Hammer.js 未加载,无法绑定“longpress”事件。
那么如何告诉 Angular-Material 我对触摸手势不感兴趣,因此我对 HammerJS 不感兴趣?
框架版本:
- 角/角 CLI v6.0.1
- 角材料 v6.4.0
- 节点 v8.11.1
- 打字稿 v2.7.2
- HammerJS - 2.0.8(移除前)
解决方案
我知道这是一个老问题,但对于任何来这里寻求答案的人,我在这个 GitHub链接上找到了解决方案
我将此添加到我的app.module.ts
import { HAMMER_LOADER } from '@angular/platform-browser';
providers: [{
provide: HAMMER_LOADER,
useValue: () => new Promise(() => {})
}]
至于单元测试,我分别添加到每个测试类中。
编辑(推荐)
这是答案的更好解决方案
安装hammerjs
模块
npm 安装hammerjs --save
然后将以下行添加到您的polyfills.ts
导入“锤子/锤子”;
推荐阅读
- android - 在 CI 构建中找不到 Gradle 任务 assembleRelease,适用于 Android Studio
- java - 如何在具有不同 Java 版本的 Wildfly 服务器上运行两个 Web 应用程序?
- ruby-on-rails - 从 has_many 表中获取记录?
- javascript - 在 ReactJs 中单击动态生成的“链接”时如何将值传递给页面?
- c++ - C++ Boost 哈希计算无冲突
- ruby-on-rails - Rubocop 执行当地规则
- sql - 通过 XQuery 将嵌套 XML 转换为平面 xml
- java - 如何在spring boot的application.property文件中引用位于spring boot maven JAR文件中的类文件
- mongodb - 将 mongodb 从 2.6 降级到 1.8 时出错
- spring-boot - 在特定子域之间共享 cookie