如何使用aot编译器

时间:2017-09-21 14:54:59

标签: angular angular2-opaquetoken

我目前正在使用不透明令牌。我首先在项目的公共部分中定义一个不透明的标记,如下所示:

import { InjectionToken } from '@angular/core';
export let JQ_TOKEN = new InjectionToken<any>('jQuery');

然后我将以下内容导入:

import { JQ_TOKEN } from './common/index'; // (I'm using barrels for this import)

//然后我将jquery定义为$ window对象:

let jQuery: Object = window['$'];

//然后在应用提供商中,我有以下内容:

{ provide: JQ_TOKEN, useValue: jQuery },

//然后,我将令牌导入组件:

import { JQ_TOKEN } from '../jQuery.service';

//并按如下方式注入

constructor(@Inject(JQ_TOKEN) private $: any) {}

这允许我用intellisense定义接口,例如:

import { OpaqueToken } from '@angular/core';

export let TOASTR_TOKEN = new InjectionToken('toastr');

export interface Toastr {
  success (msg: string, title?: string): void;
  info (msg: string, title?: string): void;
  warning (msg: string, title?: string): void;
  error (msg: string, title?: string): void;
}

上述解决方案效果非常好,除非我想用aot进行生产构建。有没有解决的办法? 也就是说,以下工作:

ng build --prod --aot false

但是这有运行时错误:

ng build --prod

我使用角度4.3.4和1.2.8的cli。

我知道我可能会使用插件,但我宁愿不这样做,因为这意味着对项目进行了很多更改,并且可能有自己的错误。我查看了角度的toastr插件,发现在调用页面导航时它仍然消失,尽管在页面导航后调用它。如果我使用OpaqueToken,则不会发生同样的问题。

0 个答案:

没有答案