angular - 如何在页面加载时触发 Toast?

标签 angular angular6 primeng

我正在尝试使用 <p-toast>在我的登录页面中,以便在用户登录时显示通知消息。

<p-toast position="top-center" key="tc"></p-toast>

然后在我的组件中声明消息。

ngOnInit() {

    // add toasts
    this.messageService.addAll([
      {key: 'tc', severity: 'info', summary: '30 Nov 2020', detail: 'Important message 1'},
      {key: 'tc', severity: 'info', summary: '30 Nov 2020', detail: 'Important message 2'}
    ]);

    // do other stuff

}

这行不通。为了确认这不是我的 toast 或消息的问题,我将消息放在 onClick() 中。页面上的事件并手动触发它,这确实有效。

如何让 Toasts 在页面加载时触发?

最佳答案

You have to send the messages once the view is initialized.

但是,通过触发 ngAfterViewInit Hook 中的消息,您可能会得到一个 ExpressionChangedAfterItHasBeenCheckedError

以下是避免此错误的解决方案:

第一个解决方案是使用 setTimeout 调用在一切都初始化后发送消息。

Here is a simple Stackblitz example

ngAfterViewInit() {
    setTimeout(() => {
        this.messageService.addAll([
            {key: 'tc', severity: 'info', summary: '30 Nov 2020', detail: 'Important message 1'},
            {key: 'tc', severity: 'info', summary: '30 Nov 2020', detail: 'Important message 2'}
        ]);
    })
}

另一种解决方案是使用 ChangeDetectorRef ( see this article ) 强制更改检测:

constructor(private messageService: MessageService, private cd: ChangeDetectorRef) { }

ngAfterViewInit() {
    this.messageService.addAll([
        {key: 'tc', severity: 'info', summary: '30 Nov 2020', detail: 'Important message 1'},
        {key: 'tc', severity: 'info', summary: '30 Nov 2020', detail: 'Important message 2'}
    ]);
    this.cd.detectChanges()
}

关于angular - 如何在页面加载时触发 Toast?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54366173/

相关文章:

angular - p-tableHeaderCheckbox 初始化时检查的所有行

javascript - 检查数组是否包含字符串,但忽略该字符串中的其余字母

google-chrome - 角 6 : DevTools failed to parse SourceMap: https://example. com/ngsw_worker.es6.js.map

angular - Angular 6 中组件之间的数据共享

angular - 将 Angular 5 更新为 Angular 6 错误

css - 当应用滚动时,primeng 中的子菜单被切断 primeng angular

angular - 无法从 Angular 12 升级到 Angular 13

Angular 2 - 如何添加自定义类?

angular - 单击按钮时如何以编程方式触发刷新 primeNG 数据表

Angular `ng-content` 未按预期使用 primeNg 表