Angular-material MatSnackBar默认持续时间

时间:2018-02-06 21:00:26

标签: angular material-design angular-material angular5

我们的团队正在使用应用程序中的角度材质的MatSnackBar。因为每个人都负责不同的页面,所以每页的snackBars有不同的持续时间。有些人将持续时间设定为2000毫秒,有些则设定为1000毫秒,有些甚至设定为3000毫秒。

我想从单个变量中获取持续时间值,这样我就可以在一个地方控制所有snackBars的持续时间。甚至可能会在调用snackBar.open函数时忽略开发人员发送持续时间值。

this.snackBar.open(message, {
  duration: 2000,
});

最好的方法是什么?

2 个答案:

答案 0 :(得分:3)

您应该设置应用程序范围default Snackbar configuration

@NgModule({
  providers: [
    {provide: MAT_SNACK_BAR_DEFAULT_OPTIONS, useValue: {duration: 2500}}
  ]
})

您仍然需要清除现有代码并删除传递明确持续时间的实例,但未来的代码只能说this.snackbar.open(msg)而没有任何选项。

答案 1 :(得分:0)

我通过包装MatSnackBar并使用factory.open的工厂解决了这个问题。

import { Injectable } from '@angular/core';
import { MatSnackBar, MatSnackBarConfig } from '@angular/material';

@Injectable()
export class SnackBarService {
  private config: MatSnackBarConfig;
  constructor(private snackBar: MatSnackBar) {
this.config = new MatSnackBarConfig();
this.config.duration = 2000;
}
public open(message: string, duration?: number, action?: string) {
this.config = duration ? Object.assign(this.config, { 'duration': duration }) : this.config;
this.snackBar.open(message, action, this.config);
}}