Как инициализировать компонент из сервиса для всплывающих сообщений
Я хочу сделать глобальную службу тостов в моем приложении с собственными стилями и HTML для тостов. Я использую ng2-toastr. Например, у меня есть компонент А. В поле зрения у меня есть кнопка:
<button (click)="showSuccess()">Click</button>
в контроллере у меня есть функция showSuccess:
showSucess() {
this.toastrService.showSuccess({
enableHTML: true,
toastLife: 3000,
});
}
В моем ToastrService у меня есть функция showSuccess:
import { Injectable } from '@angular/core';
import { ToastsManager } from 'ng2-toastr/ng2-toastr';
@Injectable()
export class ToastrService {
constructor(public toastr: ToastsManager) {}
showSucess() {
this.toastr.custom('<span style="color: #bd362f">This message should be in red with blank background. Click to dismiss.</span>',
'Custom Message', {dismiss: 'click'});
}
}
this.toastr.custom - в этой функции я устанавливаю свой собственный шаблон тоста. Теперь я хочу сделать компонент с этим шаблоном, потому что я хочу удалить этот шаблон из сервиса.
Как я могу заменить эту строку HTML с компонентом? Я хочу заменить эту строку на innerHTML компонента или что-то вроде этого. Я хочу поделиться в этом компоненте с опциями тостов из компонента в верхней части моего вопроса.
В AngularJs я использовал $templateCache для получения html из файла, но в angular2 + я не могу найти что-то подобное.
1 ответ
Я думаю, вы не можете использовать компонент вместо строки с разметкой HTML. Посмотрите здесь на исходный код.
Строка 158 имеет пользовательский метод:
custom(message: string, title?: string, options?: any): Promise<Toast>
Вы должны предоставить строку, а не компонент.
Что вы можете сделать, это прочитать это из внешнего файла, такого как json, используя HttpClient.