Angular Material Snackbar全局配置失效问题求助
解决Angular Material Snackbar全局默认配置的问题
哦,你这里混淆了两个令牌的用途啦!MAT_SNACK_BAR_DATA 并不是用来设置全局默认配置的,它的作用是给单个Snackbar实例传递自定义业务数据(比如在自定义Snackbar组件中注入这个令牌,获取你打开Snackbar时传入的专属数据),所以用它来配置duration自然不会生效。
正确的全局默认配置令牌是 MAT_SNACK_BAR_DEFAULT_OPTIONS,它确实是从@angular/material/snack-bar导出的,大概率是你看的文档版本有误或者漏看了导出项。
正确的全局配置步骤:
- 先确保正确导入所需的模块和令牌:
import { MatSnackBarModule, MAT_SNACK_BAR_DEFAULT_OPTIONS } from '@angular/material/snack-bar';
- 在你的NgModule的
providers数组中配置全局默认选项:
@NgModule({ imports: [ MatSnackBarModule ], providers: [ { provide: MAT_SNACK_BAR_DEFAULT_OPTIONS, useValue: { duration: 2500, horizontalPosition: 'center', // 可选:设置水平居中显示 verticalPosition: 'bottom' // 可选:设置底部显示 } } ] }) export class YourFeatureModule { }
临时覆盖全局配置
如果某个场景需要打破全局默认规则,在调用open()方法时传入自定义选项即可:
import { MatSnackBar } from '@angular/material/snack-bar'; constructor(private snackBar: MatSnackBar) {} openLongSnackbar() { this.snackBar.open('这是一个5秒的提示', '关闭', { duration: 5000, // 直接覆盖全局的2500ms配置 horizontalPosition: 'end' }); }
如果你的Angular Material版本比较老旧(比如低于v12),可以对应检查下版本文档,但绝大多数新版本都支持MAT_SNACK_BAR_DEFAULT_OPTIONS这个令牌。
内容的提问来源于stack exchange,提问作者celsomtrindade
相关产品推荐
相关产品推荐

