2017-09-07 38 views
1

我想在我的Angular 4应用程序中使用JDateFormatParserMoment.jsWebpack&TypeScript - 包含Moment.js插件


我设法成功地安装和使用使用Moment.js
npm install moment --save

,并用它添加到我的.ts

import * as moment from 'moment'; 

我可以使用并执行它。


之后,我安装使用插件:
npm install moment-jdateformatparser --save

我当时就想在我的代码使用它:

moment().toJDFString(moment.localeData().longDateFormat('L')) 

我的IDE已经抱怨:

TS2339:Property 'toJDFString' does not exist on type 'Moment'.


在看看this answer我尝试使用铸造做到这一点:

(<any>moment()).toJDFString(moment.localeData().longDateFormat('L')) 

这解决了在IDE中的错误,但在执行过程中控制台告诉我:

TypeError: WEBPACK_IMPORTED_MODULE_6_moment(...).toJDFString is not a function


有没有人有关如何使用它的提示?

+0

安装插件后,您是否以相同的方式导入时间?如果不是,你可以尝试从“moment-jdateformatparser”开始导入*; – Wernerson

+0

如果它和我用过的其他插件一样,你可能必须在时刻模块上“注册”它。导入并通知存在插件的时刻。当然,这是假设这个插件不依赖于单例模块(可能会关闭窗口)。 – wegry

+0

@Wernerson:非常感谢,解决了这两种情况下的问题,对于IDE(现在可能无需投射)和执行!如果你添加一个答案,我会接受它。不过,我正在问如何处理多个插件呢? – JDC

回答

1

您必须导入moment-jdateformatparser,因为它只是将其功能添加到时刻并导出moment

import * as moment from "moment-jdateformatparser"; 

至于使用多个插件似乎没有一个很好的解决方案,到目前为止,或者至少我还没有找到一个干净方式。

一种选择是你分别导入这两个插件,并将它们命名为不同的是这样的:

import * as momentJdate from "moment-jdateformatparser"; 
import * as momentTimezone from "moment-timezone"; 

你可以事后合并它们,如果你想这样的(使用deepExtend):

let moment = {}; 
deepExtend(moment, momentJdate, momentTimezone); 

//here you should be able to use moment().toJDFString() and moment.tz.names() 

在我看来,这些选项都不是clean,但它们都应该可以工作。我从来没有在一个文件中使用过更多然后一个插件,所以这样的解决方法可能没问题。

+0

我会问一个新的问题,如果有更好的解决方案使用多个插件,因为我真的没有找到更好的解决方案。 – Wernerson

+0

[Here's](https://stackoverflow.com/questions/46091734/how-to-use-multiple-moment-plugins)这个问题是否对你有兴趣。 – Wernerson