角5:函数调用中不支持的装饰(Angular 5: Function calls are not s

2019-10-28 13:28发布

我从我的角度应用程序建立一个PWA和我收到以下错误,当我运行ng build --prod

ERROR in app\app.module.ts(108,64): Error during template compile of 'AppModule'
Function calls are not supported in decorators but 'Environment' was called in 'environment'
'environment' calls 'Environment'.

然而,这没有任何意义,因为我说export来,你可以看到这里的类:

environment.prod.ts

import { BaseEnvironment } from './base-environment';
import { ProspectBuilderModel } from '../app/models/prospect';

export class Environment extends BaseEnvironment {
  production: boolean = true;
  prospectBuilderModel: ProspectBuilderModel = {
    buildQuote: false,
    buildAcknowledge: false,
    buildOrganizationInfo: false,
    buildFinancialInfo: false,
    buildTradeInfo: false,
    buildPermissiblePurpose: false,
    buildUserSetup: false,
    buildPackageSelection: false,
    buildPaymentOptions: false,
    buildOrderOptions: false,
    buildVerifyOrganizationInfo: false,
    buildDocusignAuthorization: false,
    buildDocusignContract: false
  };
}

export const environment = new Environment();

基environment.ts

import { ProspectBuilderModel } from '../app/models/prospect';

export abstract class BaseEnvironment {
  abstract production: boolean;
  abstract prospectBuilderModel: ProspectBuilderModel;
}

app.module.ts

...
 ],
  imports: [
    BrowserModule,
    AppRoutingModule,
    FormsModule,
    MultiselectDropdownModule,
    ReactiveFormsModule,
    HttpModule,
    ToastrModule.forRoot(),
    BrowserAnimationsModule,
    NgxMyDatePickerModule.forRoot(),
    PopoverModule.forRoot(),
    ModalModule.forRoot(),
    ServiceWorkerModule.register('/ngsw-worker.js', { enabled: environment.production })
  ],
  providers: [
...

有谁知道我能做些什么来解决这个问题?

Answer 1:

我假设你加入了线ServiceWorkerModule.register(“/ NGSW-worker.js”,{启用:environment.production})之前,你的代码是工作

通常,当我们在应用模块访问环境变量,它通常指的是环境文件自动生成由角CLI(它们基本上常数和导出为这样)。 我从来没有尝试创建一个类的对象,其传递的应用模块。 这可能会造成问题。

刚刚尝试直接在该行通过一个真实的,而不是从一个对象得到它,看看是否可行。



Answer 2:

下面是我终于想出了解决方案的代码。 希望永远运行到这一类问题的这个帮助别人。 从本质上讲,我只是修改我的环境文件,以便它没有创造环境类的一个实例。 我想没有角的LIKEY实例:

export const environment = {
  production: true,
  prospectBuilderModel: {
    buildQuote: false,
    buildAcknowledge: false,
    buildOrganizationInfo: false,
    buildFinancialInfo: false,
    buildTradeInfo: false,
    buildPermissiblePurpose: false,
    buildUserSetup: false,
    buildPackageSelection: false,
    buildPaymentOptions: false,
    buildOrderOptions: false,
    buildVerifyOrganizationInfo: false,
    buildDocusignAuthorization: false,
    buildDocusignContract: false
  }
}


Answer 3:

有同样的问题,以下是可能的解决方法(如果你没有动态加载的特性):

1.当你的答案,只是对象。

但你失去约“落实”的属性默认属性和信息。

2.使用静态类:

在这里你失去“实现”性质,因为抽象的静态是不可能的 ,但你拥有的类型和默认值。

// default.env.ts
export class BaseEnvironment {
  public production: boolean = true;
  public specialPropToImpl: boolean = true;
}

// your.env.ts
export class Environment extends BaseEnvironment {
  public specialPropToImpl = true;
}

export const environment = Environment;

3.使用默认属性对象,接口和对象分配:

在这里,你有“实施”性质,类型和默认值,但有点难看实现。

// default.env.ts
export interface EnvProperties {
  production: boolean;
  specialPropToImpl: boolean;
}

export const defaultEnv = {
  production: true
};

// your.env.ts
export const environment: EnvProperties = {
  ...defaultEnv,
  specialPropToImpl: true
};

从环境4.只是一个静态变量多

简单的解决方案,你把你的子类,但每个ENV文件必须拥有它。 但由于新的环境文件是由旧的copypaste创建的,这可以工作。
取决于生产值,则应该手动更改变量的值。
不是很灵活和维护的解决方案。 但是简单。

// your.env.ts
export const enablePwa = true

// app.module.ts
import {environment, enablePwa} from 'env.ts'
//...
ServiceWorkerModule.register('/ngsw-worker.js', { enabled: enablePwa })


文章来源: Angular 5: Function calls are not supported in decorators