捆绑后,Angular2 RC6注入LOCALE_ID失败

时间:2016-09-07 21:13:30

标签: angular dependency-injection rollupjs

我正在尝试捆绑一个Angular2应用,刚刚更新到RC6,基于this excellent blog post.

我有一个只包装内置DatePipe的管道,区别在于它接受一个null参数,并在收到它的情况下执行某些操作。对于RC6,必须更新以将_locale参数传递给DatePipe。这是管道:

import {Pipe, PipeTransform, Inject, LOCALE_ID} from '@angular/core';
import {DatePipe} from '@angular/common';

@Pipe({
    name: 'myDate',
})
export class MyDatePipe implements PipeTransform {
    constructor(@Inject(LOCALE_ID) private _locale: string){}

    transform(value: any, pattern?: string): string {
        if (value === null) {
            return 'Not Available';
        }

        return new DatePipe(this._locale).transform(value, pattern);
    }
}

这种依赖注入方法与one used by the built-in DatePipe (best I can tell).

相同

编译开发并加载systemjs时,这很好用。但是在捆绑汇总后,_locale在传递给构造函数时为null。捆绑中的实例化如下所示:

this._pipe_myDate_0 = new MyDatePipe(this.parentInjector.get(LOCALE_ID));
// this.parentInjector.get(LOCALE_ID) == null

我可以提供汇总配置和tsconfigs,如果这有用 - 但暂时不会,因为它会增加大量的问题。捆绑过程现在是:

ngc(es2015) -> rollup(es2015) -> tsc(es5)

应用程序的其余部分工作得很好!我现在通过直接将'en-US'传递给DatePipe解决了这个问题,但我很好奇为什么它不起作用,而且我想要正确地做到这一点。

1 个答案:

答案 0 :(得分:1)

为每个区域设置编译:

ngc --locale=en-US