Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/sharepoint/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular 角度材质MatsnakBar默认持续时间_Angular_Material Design_Angular Material_Angular5 - Fatal编程技术网

Angular 角度材质MatsnakBar默认持续时间

Angular 角度材质MatsnakBar默认持续时间,angular,material-design,angular-material,angular5,Angular,Material Design,Angular Material,Angular5,我们的团队在应用中使用了角材料的Matsnakbar。因为每个人负责不同的页面,所以每个页面的snackbar有不同的持续时间和时间。有些人将持续时间设置为2000ms,有些人设置为1000ms,有些人甚至设置为3000ms 我想从单个变量中获取持续时间值,这样我就可以在一个地方控制所有snackbar的持续时间。甚至可以在调用snackBar.open函数时让开发人员不发送持续时间值 this.snackBar.open(message, { duration: 2000, }); 最好

我们的团队在应用中使用了角材料的Matsnakbar。因为每个人负责不同的页面,所以每个页面的snackbar有不同的持续时间和时间。有些人将持续时间设置为2000ms,有些人设置为1000ms,有些人甚至设置为3000ms

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

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

最好的方法是什么?

我通过包装Matsnakbar并使用工厂打开对话框来解决这个问题

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);
}}

您应该在应用程序范围内设置


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

您可能正在寻找一个使用
行为主题的单例服务
这将迫使所有开发人员在使用natSnackBar的每个页面中注入另一个服务。难道没有一种更优雅的方式吗?这是正确的,如果不直接编辑
MatsnakBarmodule
,这将是另一种选择。你或多或少只需要在那里添加BehSub,而不是一个新服务。非常感谢。。你能解释一下怎么做吗?什么是BehSub?它是
行为主体
。这将是一个体面的工作,能够嵌入到npm包,特别是如果你计划使用它的生产。强烈建议只使用singleton服务,不要尝试编辑材料模块这是正确的方法,尽管我对自己的回答是:-)
@NgModule({
  providers: [
    {provide: MAT_SNACK_BAR_DEFAULT_OPTIONS, useValue: {duration: 2500}}
  ]
})