У меня есть небольшая библиотека Angular 6, в которой я создаю повторно используемый компонент для отображения сообщений уровня страницы, таких как ошибка, информация, предупреждение и успех.
Для этого у меня есть перечисление ServerMessageType.ts, которое достаточно просто:
export enum ServerMessageType {
Error = 'error',
Info = 'info',
Success = 'success',
Warning = 'warning'
}
ServerMessage.ts должен использовать ServerMessageType:
import { ServerMessageType } from './ServerMessageType';
export class ServerMessage {
constructor(public type: ServerMessageType,
public messageText: string,
public dismissible?: boolean,
public id?: string) {
}
}
server-messages.component.ts
import { Component, EventEmitter, Input, Output } from '@angular/core';
import { ServerMessage } from './ServerMessage';
import { ServerMessageType } from './ServerMessageType';
@Component({
selector: 'app-server-messages',
templateUrl: './server-messages.component.html',
styleUrls: []
})
export class ServerMessagesComponent {
@Input() messages: ServerMessage[];
@Output() messageRemoved = new EventEmitter<ServerMessage>();
constructor() {
}
clearMessage = function (index: number) {
const message = this.messages[ index ];
this.messageRemoved.emit(message);
this.messages.splice(index, 1);
};
getMessageClass(message: ServerMessage): string {
switch (message.type) {
case ServerMessageType.Error:
return 'alert-danger';
case ServerMessageType.Info:
return 'alert-info';
case ServerMessageType.Success:
return 'alert-success';
case ServerMessageType.Warning:
return 'alert-warning';
}
}
isDismissible(message: ServerMessage): boolean {
return message.dismissible === true;
}
}
Однако когда я запускаю ng build, я получаю сообщение об ошибке:
BUILD ERROR
> projects/framework/src/lib/server-messages/server-messages.component.ts(3,28):
> error TS2305: Module
> '"/Users/xxx/dev/apps/framework/projects/framework/src/lib/server-messages/ServerMessage"'
> has no exported member 'ServerMessageType'
Что я делаю неправильно? Если я изменю type в ServerMessage на строку и полностью удалю перечисление ServerMessageType, все будет нормально построено и развернуто.
Спасибо!
Пожалуйста, проверьте server-messages.component.ts. Вы ошиблись оператором импорта.
@RitwickDey Как? Я, должно быть, слепой.
Вы не поделились своим messages.component.ts ... Вы поделились 'ServerMessageComponent.ts' .... Это ваша ошибка в stackoverflow?
@RitwickDey упс, я назвал ServerMessageComponent.ts на самом деле server-message-component.ts
Возможный дубликат Angular 2: экспортировать компонент в модуль и импортировать и использовать его внутри модуля
Неа. Это не дубликат. Это не связано с компонентом или модулем Angular. Она просто использует функцию enum - language.
Это действительно сбивает с толку. Можете ли вы сказать мне все имена файлов в projects/framework/src/lib/server-messages/ @IsabellePlante
Вы вообще используете перечисление ServerMessageType в своем шаблоне html?





Вам необходимо явно экспортировать компонент из модуля, если вы хотите импортировать этот компонент, импортировав этот модуль.
Код, в котором вы должны решить эту проблему, - это код модуля, из которого вы хотите экспортировать этот компонент.
Спасибо! Не могли бы вы пояснить немного лучше на примерах? Не думаю, что понимаю.
Это объясняется здесь: stackoverflow.com/questions/41960959/…
Вам нужно импортировать свой компонент в корневой модуль, и когда вы делаете сервис, сделайте его @Injectable, чем используйте.
Глупая ошибка!
В server-messages.component.ts эти две строки:
import { ServerMessage } from './ServerMessage';
import { ServerMessageType } from './ServerMessageType';
Был возвращен к
import { ServerMessage, ServerMessageType } from './ServerMessage';
Спасибо за вашу помощь! Он не смог найти ServerMessageType в ServerMessage.ts, так как он экспортирован в ServerMessageType.ts ...
Спасибо всем за помощь!
что в
./server-messages.component.html?