【问题标题】:How to fix ERROR TypeError: Class constructor HammerGestureConfig cannot be invoked without 'new'如何修复错误类型错误:没有“新”就无法调用类构造函数 HammerGestureConfig
【发布时间】:2019-11-27 16:05:00
【问题描述】:

我在添加 ngx-gallery 时遇到问题。 检查时出现错误 ERROR 类型错误:没有'new'就不能调用类构造函数HammerGestureConfig

我已经在app.module中添加了hammerjs但是还是有问题

这是我的 app.module

import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';
import { HttpClientModule } from '@angular/common/http';
import { FormsModule } from '@angular/forms';
import { BsDropdownModule, TabsModule } from 'ngx-bootstrap';
import { RouterModule } from '@angular/router';
import { appRoutes } from './routes';
import { AuthGuard } from './_guards/auth.guard';
import { AuthService } from './_services/auth.service';
import { ErrorInterceptorProvider } from './_services/error.interceptor';
import { AlertifyService } from './_services/alertify.service';
import { UserService } from './_services/user.service';
import { JwtModule } from '@auth0/angular-jwt';
import { MemberDetailResolver } from './_resolvers/member-detail.resolver';
import { MemberListResolver } from './_resolvers/member-list.resolver';
import { NgxGalleryModule } from 'ngx-gallery';


import { AppComponent } from './app.component';
import { NavComponent } from './nav/nav.component';
import { DashboardComponent } from './dashboard/dashboard.component';
import { RegisterComponent } from './register/register.component';
import { MemberListComponent } from './members/member-list/member-list.component';
import { ListComponent } from './list/list.component';
import { MessagesComponent } from './messages/messages.component';
import { MemberCardComponent } from './members/member-card/member-card.component';
import { MemberDetailComponent } from './members/member-detail/member-detail.component';

export function tokeGetter() {
  return localStorage.getItem('token');
}

@NgModule({
  declarations: [
    AppComponent,
    NavComponent,
    DashboardComponent,
    RegisterComponent,
    MemberListComponent,
    ListComponent,
    MessagesComponent,
    MemberCardComponent,
    MemberDetailComponent
  ],
  imports: [
    BrowserModule,
    HttpClientModule,
    FormsModule,
    BsDropdownModule.forRoot(),
    TabsModule.forRoot(),
    RouterModule.forRoot(appRoutes),
    NgxGalleryModule,
    JwtModule.forRoot({
      config: {
        tokenGetter: tokeGetter,
        whitelistedDomains: ['192.168.100.6:5000'],
        blacklistedRoutes: ['192.168.100.6:5000/api/auth']
      }
    })
  ],
  providers: [
    AuthService,
    ErrorInterceptorProvider,
    AlertifyService,
    AuthGuard,
    UserService,
    MemberDetailResolver,
    MemberListResolver
  ],

  bootstrap: [AppComponent]
})
export class AppModule { }

我想在每个用户中显示照片,但由于出错而无法显示

【问题讨论】:

    标签: angular typescript hammer.js


    【解决方案1】:

    最近我知道我们可以通过使用新版本的 Ngx-Gallery 来解决这个问题。我刚刚卸载了ngx-gallery

    npm uninstall  ngx-gallery
    

    然后我安装了 angular 9 支持的版本:

    npm install ngx-gallery-9 --save
    

    之后,我刚刚从 app.module.ts 中删除了旧引用并将其更改为新格式:

    // import {NgxGalleryModule} from 'ngx-gallery'; // remove this line
    import {NgxGalleryModule} from 'ngx-gallery-9';
    

    或者,如果您坚持使用旧版本,则更改其他人提到的tsconfig.ts 不是一个好主意(因为您想使用新功能)。您可以轻松地将打击代码添加到您的app.module.ts,您将看到更改:

    export class CustomHammerConfig extends HammerGestureConfig  {
       overrides = {
           pinch: { enable: false },
           rotate: { enable: false }
       };
    }
    

    然后在提供者中添加这个:

    providers: [
    { provide: HAMMER_GESTURE_CONFIG, useClass: CustomHammerConfig }
    ]
    

    【讨论】:

    • 完美,这是最简单的解决方案!
    【解决方案2】:

    使用 npm install @kolkov/ngx-gallery 代替 npm install ngx-gallery 并从 app.module 中的 @kolkov/ngx-gallery 导入。

    【讨论】:

    • 虽然此代码可以解决问题,including an explanation 说明如何以及为什么解决问题将真正有助于提高您的帖子质量,并可能导致更多的赞成票。请记住,您正在为将来的读者回答问题,而不仅仅是现在提出问题的人。请edit您的回答添加解释并说明适用的限制和假设。
    【解决方案3】:

    有更好的方法来解决这个问题。

    修改 app.module.ts 中的提供程序

    export class CustomHammerConfig extends HammerGestureConfig  {
       overrides = {
           pinch: { enable: false },
           rotate: { enable: false }
       };
    }
    

    并添加到提供者

    providers: [
        {
            provide: HAMMER_GESTURE_CONFIG, useClass: CustomHammerConfig 
        }
    ]
    

    【讨论】:

    • 这显然是正确的做法。应该是imo接受的答案。
    • 同意,这应该是公认的答案。不要降级到 es5,也不要更改你的 node_modules
    • 另外,如果Class CustomHammerConfig in src/app/app.module.ts extends from a Injectable in another compilation unit without duplicating the decorator,只需将@Injectable() 放在exports 之前。不要忘记导入所有需要的数据。
    【解决方案4】:

    您可以打开 package.json 并更改 "ngx-gallery": "git://github.com/onack/ngx-gallery-dist" 代替 “ngx 画廊”:“^5.10.0” 你会在 dependencies

    中找到它们

    【讨论】:

      【解决方案5】:

      您可以转到 tsconfig.json 文件并将目标更改为 es5 (ECMAScript 5) 像这样:

        {
        "compileOnSave": false,
        "compilerOptions": {
          "baseUrl": "./",
          "outDir": "./dist/out-tsc",
          "sourceMap": true,
          "declaration": false,
          "module": "esnext",
          "moduleResolution": "node",
          "emitDecoratorMetadata": true,
          "experimentalDecorators": true,
          "importHelpers": true,
          "target": "es5",
          "typeRoots": ["node_modules/@types"],
          "lib": ["es2018", "dom"]
        }
      }
      

      感谢:https://github.com/lukasz-galka/ngx-gallery/issues/242#issuecomment-483223817

      或推荐的方式:如果你不想改变目标,你可以使用这种方式:

      进入 node_modules => ngx-gallery => bundles => ngx-gallery.umd.js

      改变这个:

      var CustomHammerConfig = /** @class */ (function (_super) {
      __extends(CustomHammerConfig, _super);
      function CustomHammerConfig() {
          var _this = _super !== null && _super.apply(this, arguments) || this;
          _this.overrides = ({
              'pinch': { enable: false },
              'rotate': { enable: false }
          });
          return _this;
      }
      return CustomHammerConfig;
      }(platformBrowser.HammerGestureConfig));
      

       class CustomHammerConfig extends platformBrowser.HammerGestureConfig {
          constructor() {
              super(...arguments);
              this.overrides = ({
                  'pinch': { enable: false },
                  'rotate': { enable: false }
              });
          }
      }
      

      https://github.com/lukasz-galka/ngx-gallery/issues/242#issuecomment-502917803

      【讨论】:

      • 你不应该直接修改 node_modules 中的代码,因为它可能会被下一次 npm 安装覆盖。此外,如果您克隆源代码,您将不得不运行 npm install 并因此再次获取损坏的版本...
      猜你喜欢
      • 2021-07-16
      • 2019-03-21
      • 1970-01-01
      • 1970-01-01
      • 2020-08-07
      • 1970-01-01
      • 2020-08-11
      • 2020-07-01
      • 1970-01-01
      相关资源
      最近更新 更多