prime-ng p-всплывающее окно в компоненте приложения не отображает сообщения, отправленные из других компонентов

#angular #primeng

#angular #primeng

Вопрос:

Чтобы уменьшить количество основных компонентов toast (p-toast) в моем веб-приложении, я попытался использовать центральный p-toast с ключом в app.component. Затем я добавляю сообщения из других компонентов, используя messageservice с ключом этого компонента toast. К сожалению, тосты не отображаются.

мой app.component.html

 <div>
  <app-header></app-header>
  <router-outlet></router-outlet>
  <app-footer *ngIf="!userLoggedIn"></app-footer>
</div>
<p-toast [style]="{ marginTop: '80px' }" key="myToast"></p-toast>
  

my app.component.ts

 @Component({
  selector: 'app-root',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.scss'],
  providers: [MessageService]
})
export class AppComponent implements OnInit, OnDestroy {

  constructor(
    private readonly messageService: MessageService
  ) {...
  

изнутри компонента (показано через routeroutlet) Я добавляю сообщение:

   this.messageService.add({
    severity: 'success',
    summary: 'Success Message',
    key: 'myToast',
    detail: 'Order submitted'
  });
  

Я также попробовал следующие альтернативы:

 this.ngZone.run(() => {
  this.messageService.add({
    severity: 'success',
    summary: 'Success Message',
    key: 'myToast',
    detail: 'Order submitted'
  });
});
  

и

 setTimeout(() => {
  this.messageService.add({
    severity: 'success',
    summary: 'Success Message',
    key: 'myToast',
    detail: 'Order submitted'
  });
}, 1000);
  

Ничего из этого не работает.

Я что-то забыл? Или p-toast не должен использоваться таким образом?

Ответ №1:

Вам просто нужно изменить еще несколько вещей

1) Добавьте ToastModule в список импорта AppModule

2) Добавьте MessageService в список поставщиков AppModule

3) Удалите MessageService из массива providers в любом другом компоненте, вы все равно можете импортировать MessageService и выполнять this.messageService.add из любого компонента

Тогда попробуйте