Highchartsは、 import
を使用してモジュールとしてロードすると、 moment
を見つけることができるはずです。
moment
はwindow
に保存されないため、次のようにmoment
にアクセスしようとするとHighchartsが失敗します。
https://github.com/highcharts/highcharts/blob/3c8867e8ead548ada66c38f73fce74b2130dac8b/js/parts/Time.js#L370
https://codesandbox.io/s/7yyz98kv4x
app/app.component.ts
コードとコメントを参照してください
ユーザーが設定できるtime.moment
などのAPIオプションを追加して、上記の引用コードにmoment
を次のように読み込むことができるようにします。
moment = options.moment || win.moment;
POC: https :
moment
をwindow.moment
として設定すると、Highchartsがそれを見つけることができます。 例:
import * as moment from "moment";
window.moment = moment;
同じ問題がありますが、提案された回避策は私にはうまくいきません。
コンパイル時にエラーメッセージが表示されます。
apps/frontend/src/app/solar-data/cell-power-graph/cell-power-graph.component.ts(8,8): error TS2339: Property 'moment' does not exist on type 'Window'.
次のように設定されました。
import { Component, Input, OnDestroy, OnInit, ViewChild } from '@angular/core';
import * as Highcharts from 'highcharts';
import ExportingModule from 'highcharts/modules/exporting';
import * as Moment from 'moment';
import * as mTZ from 'moment-timezone';
window.moment = Moment;
mTZ();
@mfechner
このエラーはビルドJavaScriptには影響しません-設定によってTSエラーでのビルドが防止されない限り。 私の解決策は単なる回避策なので、 window
をany
キャストするか、他の方法を使用してこのエラーを抑制することで、このTSエラーを無視できます。
(window as any).moment = Moment;
または、 Window
インターフェイスを拡張して、 moment
定義を追加することもできます。これは、このタイプのエラーの適切な解決策です。
このヒントをどうもありがとう、次のスニピットは私にとってうまくいきました:
import { Component, Input, OnDestroy, OnInit, ViewChild } from '@angular/core';
import * as Highcharts from 'highcharts';
import ExportingModule from 'highcharts/modules/exporting';
import * as Moment from 'moment';
import * as mTZ from 'moment-timezone';
declare global {
interface Window {
moment: any;
}
}
window.moment = Moment;
mTZ();
ExportingModule(Highcharts);
Highcharts.setOptions({
title: {
...
@Component({
...
})
export class CellPowerGraphComponent implements OnInit, OnDestroy {
...
最も参考になるコメント
このヒントをどうもありがとう、次のスニピットは私にとってうまくいきました: