gpt4 book ai didi

angular - 如何使用 NgModule 导出 const

转载 作者:行者123 更新时间:2023-12-02 03:41:30 25 4
gpt4 key购买 nike

我有一个常量,应该可以被导入我的其他模块使用。

我有 Datepicker 指令,它定义了日期格式常量(我有这样的指令,所以使用我的指令的人可以使用这些常量):

export const DATETIME_FORMAT = 'DD/MM/YYYY HH:mm:ss';
export const DATE_FORMAT = 'DD/MM/YYYY';
export const TIME_FORMAT = 'DD/MM/YYYY';

还有用于进一步导出它们的 NgModule。构建此模块,然后在其他项目/模块中使用。

import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { DatepickerDirective, TIME_FORMAT, DATETIME_FORMAT, DATE_FORMAT } from './datepicker.directive';

@NgModule({
imports: [
CommonModule
],
exports: [
DatepickerDirective,
DATE_FORMAT,
DATETIME_FORMAT,
TIME_FORMAT
],
declarations: [
DatepickerDirective
]
})
export class DatepickerModule { }

但是当尝试构建它时,我收到错误:

ERROR in src/app/datepicker/datepicker.module.ts(5,11): error TS2345: Argument of type '{ imports: (typeof CommonModule)[]; exports: (string | typeof DatepickerDirective)[]; declara...' is not assignable to parameter of type 'NgModule'.
Types of property 'exports' are incompatible.
Type '(string | typeof DatepickerDirective)[]' is not assignable to type '(any[] | Type<any>)[]'.
Type 'string | typeof DatepickerDirective' is not assignable to type 'any[] | Type<any>'.
Type 'string' is not assignable to type 'any[] | Type<any>'.

最佳答案

NgModule 无法导出常量,但您可以使用 InjectionToken 提供值。查找有关 InjectionToken 的更多信息 here .

import { ModuleWithProviders, NgModule, InjectionToken } from '@angular/core';
import { CommonModule } from '@angular/common';
import { DatepickerDirective, TIME_FORMAT, DATETIME_FORMAT, DATE_FORMAT } from './datepicker.directive';

export interface IDatepickerFormats {
TIME_FORMAT: string;
DATETIME_FORMAT: string;
DATE_FORMAT: string;
}

export const DATEPICKER_FORMATS = new InjectionToken<IDatepickerFormats>('datepicker.formats');

@NgModule({
imports: [CommonModule],
exports: [DatepickerDirective],
declarations: [DatepickerDirective]
})
export class DatepickerModule {
static forRoot(): ModuleWithProviders {
return {
ngModule: DatepickerModule,
providers: [
{
provide: DATEPICKER_FORMATS,
useValue: {TIME_FORMAT, DATETIME_FORMAT, DATE_FORMAT}
}
]
};
}
}

现在,每个导入 Datepicker 模块的模块都可以在其声明的组件中注入(inject)并使用这些常量。例如:

import { Component, Inject} from '@angular/core';
import { DATEPICKER_FORMATS, IDatepickerFormats } from './datepicker';

@Component({
selector: 'app-example',
templateUrl: './app-example.component.html',
styleUrls: ['./app-example.component.scss']
})
export class AppExampleComponent {
private DATE_FORMAT: string;
private TIME_FORMAT: string;
private DATETIME_FORMAT: string;

constructor(@Inject(DATEPICKER_FORMATS) private datePickerFormats: IDatepickerFormats) {
this.DATE_FORMAT = this.datePickerFormats.DATE_FORMAT;
this.TIME_FORMAT = this.datePickerFormats.TIME_FORMAT;
this.DATETIME_FORMAT = this.datePickerFormats.DATETIME_FORMAT;
}
}

关于angular - 如何使用 NgModule 导出 const,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48465071/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com