You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Angular新手求助:如何从matSnackBar的openFromComponent获取数据?

当然可以获取到数据啦!

你已经迈出了正确的第一步——在调用openFromComponent时通过data参数传递了apiName,接下来只需要在自定义的CustomSnackbarComponent中注入MAT_SNACK_BAR_DATA令牌,就能轻松拿到这份数据。

具体步骤如下:

1. 导入必要的依赖

首先在你的自定义组件文件顶部,补充导入MAT_SNACK_BAR_DATA:

import { Component, OnInit, Inject } from '@angular/core';
import { MAT_SNACK_BAR_DATA } from '@angular/material/snack-bar';
import { DomSanitizer } from '@angular/platform-browser';

2. 在构造函数中注入并接收数据

修改组件的构造函数,通过@Inject装饰器注入MAT_SNACK_BAR_DATA,并把数据赋值给组件属性方便后续使用:

export class CustomSnackbarComponent implements OnInit {
  // 声明属性存储传入的API名称
  public apiName: string;

  constructor(
    private sanitizer: DomSanitizer,
    @Inject(MAT_SNACK_BAR_DATA) public data: any
  ) {
    // 从注入的data中取出传入的apiName
    this.apiName = data;
  }

  ngOnInit(): void {
    // 在这里可以直接使用this.apiName做你需要的操作
    console.log('获取到的API名称:', this.apiName);
  }
}

3. (可选)在模板中展示数据

如果需要在自定义snackbar的模板里展示apiName,直接用插值表达式即可:

<div class="snackbar-content">
  <p>当前调用的API:{{ apiName }}</p>
</div>

另外提个小细节:你调用openFromComponent的代码里,data: this.apiName;后面的分号应该改成逗号,避免语法错误:

this.snackBar.openFromComponent(CustomSnackbarComponent, { 
  duration: 5000000, 
  data: this.apiName // 这里换成逗号哦
});

这样就能完美获取到你传入的apiName数据啦!

内容的提问来源于stack exchange,提问作者Matthis.h

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 08:39:15