【问题标题】:moment is not defined (Angular 8, TS 3)时刻未定义(Angular 8,TS 3)
【发布时间】:2019-09-09 13:31:08
【问题描述】:

运行 Angular 8 和 TS 3。即使我通过开发工具在 webpack 的文件中看到 moment.js,我也无法开始工作。我在这里遵循了对 TS 2 的建议:https://momentjs.com/docs/#/use-it/typescript/。即使我等待页面加载并在开发工具的命令行中调用 moment() 也会失败。

尝试使用 moment 的代码位于路由保护中,因此我将 moment 引用(用于测试)放在我试图点击的页面中。

import * as moment from 'moment';

然后,我的身份验证守卫实例化一个使用时刻的“AuthenticationHelper”:

[...]

const authHelper = new AuthenticationHelper();
authHelper.RefreshAccessToken(token, this._tokenStore, this._authenticationService, this._authApiService)
        .catch(err => {
          this._router.navigateByUrl(this._loginUrl);
        })

[...]

在 RefreshAccessToken 内的后续方法调用中:

[...] && token.Expiration < moment().unix()

【问题讨论】:

  • 你能展示一些你想在哪里使用它的代码吗?`
  • @xdecdec 代码添加
  • 您可以尝试将您的导入放在您的方法调用 moment 的文件中吗?

标签: angular typescript momentjs


【解决方案1】:

想通了。在 angular.json 中,我必须向脚本数组添加时刻,以便加载并准备就绪。

所以在 build.options.scripts 中,添加“node_modules/moment/min/moment.min.js”

应该是这样的

"scripts": [
    [...]
    "node_modules/moment/min/moment.min.js"
]

【讨论】:

  • 这不是在 typescript 中使用 moment 的官方预期方式,因为它通过全局导出的 moment 对象工作。相反,您需要在要使用它的确切文件中导入时刻。
【解决方案2】:

如果 es6 模块导入不起作用,简单的解决方案是使用旧的导入。

var moment = require('moment');

【讨论】:

    猜你喜欢
    • 2016-12-23
    • 2016-01-05
    • 1970-01-01
    • 2019-12-03
    • 2019-10-19
    • 2021-06-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多