我们的团队正在使用应用程序中的角度材质的MatSnackBar。因为每个人都负责不同的页面,所以每页的snackBars有不同的持续时间。有些人将持续时间设定为2000毫秒,有些则设定为1000毫秒,有些甚至设定为3000毫秒。
我想从单个变量中获取持续时间值,这样我就可以在一个地方控制所有snackBars的持续时间。甚至可能会在调用snackBar.open函数时忽略开发人员发送持续时间值。
this.snackBar.open(message, {
duration: 2000,
});
最好的方法是什么?
答案 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);
}}