Angular2 + TypeScript + moment.js => locale并不都在那里(只是'en')
我正在通过一本书教程学习TypeScript和AngularJS 2.0 :(Become_a_Ninja_with_Angular2)。
在某个时候,它解释了如何制作自己的Pipe,并通过moment.js的实现。
在我的项目所在的文件夹我做的CLI: npm install moment
(通知:本书还告诉做typestypings install --save --ambient moment-node
,但即使我改变抛出一个错误 – --ambient
--global
,这个错误碰巧不是使用moment.js
的问题,因为我在下面描述的代码的其余部分运行)。
然后,由于以前的CLI,它会在我的项目文件夹下创build: [my project folder]\node_modules\moment
然后在[my project folder]\main.html
,我有一个<script>
标签:`
<script> System.config({ defaultJSExtensions: true, map: { ... [plenty of stuff starting with @angular].. '@angular/platform-browser-dynamic':'node_modules/@angular/platform-browser-dynamic/bundles/platform-browser-dynamic.umd.js', 'rxjs': 'node_modules/rxjs', 'moment':'node_modules/moment/moment' } }); System.import('main'); </script>
我的自定义pipe道如下所示:
import { PipeTransform, Pipe } from '@angular/core'; import * as moment from 'moment'; import 'moment/../locale/fr'; @Pipe({name: 'fromNow'}) export class FromNowPipe implements PipeTransform { transform(value,args){ let mydate = moment(new Date(value)); console.log(moment.locales()); return mydate.fromNow(); } }
正如你可以在我的自定义pipe道代码中看到的,要访问语言环境'fr'
,我必须添加import 'moment/../locale/fr
( 通过查看已有的StackOverflow解决schemefind的 )。 如果这个标签没有实现,我只能访问'en'
。 这意味着添加其他语言将需要添加import 'moment/../locale/[the locale I want available]
。
任何人都有任何想法如何从“moment.js”的所有locale
,只有单一的import * as moment from 'moment';
声明?
PS:我添加到[我的项目文件夹] \ app.module.ts:
import { FromNowPipe } from './custom_pipes/fromnow.pipe'; ... @NgModule({ ... declarations: [...,FromNowPipe], ... }) ...
在我的一个组成部分,我有:
[@Component({ selector: 'ns-mycomponent', template:` .. <div>{{ '2016/05/01'|fromNow }}</div>.. ` })
我find了一个解决方法:
根据我在问题中写的内容,在[my project folder]\main.html
:
System.config({ defaultJSExtensions: true, map: { ... } });
我用'moment':'node_modules/moment/moment'
代替了'moment':'node_modules/moment/moment'
'moment':'node_modules/moment/min/moment-with-locales.min.js'
在我的Pipe文件中,我只保留了: import * as moment from 'moment';
在文件的开始,它的工作原理: 所有的语言都可用 。