Angular 2 Snackbar - 全局持续时间配置

Posted

技术标签:

【中文标题】Angular 2 Snackbar - 全局持续时间配置【英文标题】:Angular 2 Snackbar - Global Duration Config 【发布时间】:2017-05-05 22:37:43 【问题描述】:

我可以像这样设置小吃店消息的持续时间

let config = new MdSnackBarConfig();
config.duration = 5000;

this.snackBar.open(element.text, 'OK', config);

但是我需要为多个小吃店设置持续时间,并且不想每次都传递配置。

我可以以某种方式设置全局持续时间配置吗?

谢谢!

【问题讨论】:

【参考方案1】:

我知道这篇文章是几年前的,但为了将来的参考,我还是会回答这个问题。希望我能像我一样帮助看到这篇文章的人。

您现在可以使用@NgModule 中的提供程序为模块注入带有默认选项的MatSnackBar

import  MatSnackBarModule, MAT_SNACK_BAR_DEFAULT_OPTIONS  from '@angular/material';

@NgModule(
    declarations: [],
    imports: [
        MatSnackBarModule
    ],
    exports: [
        MatSnackBarModule
    ],
    providers: [
         provide: MAT_SNACK_BAR_DEFAULT_OPTIONS, useValue:  duration: 2500  
    ]
)

来源:Material Angular doc's

【讨论】:

【参考方案2】:

我们所做的是在模块级别包含一个外部 app.config.ts 文件,并将其包含在我们需要的地方。这是文件中内容的一个示例。

export class Config 
    static apiUrl = "api/";
    static token = "";
    static snackBarDurration = 5000;
    ......

然后,您所要做的就是在您的模块中声明它,然后将其导入您想要使用它的组件或服务中。这是一个例子。

import  Injectable  from "@angular/core";
import  Config  from "../../app.config";

@Injectable()
export class SnackBarService 

    .... // declare your snackbar here

    constructor()  

    showSnackBar(elementText: string)
        let config = new MdSnackBarConfig();
        config.duration = Config.snackBarDurration; // Here is your change

        this.snackBar.open(elementText, 'OK', config);
    

【讨论】:

【参考方案3】:

我知道这不是全局配置的解决方案,而是 使调用更紧凑我在参数中声明了配置:

this.snackBar.open(elementText, 'OK',  duration: 3000 );

【讨论】:

这是针对特定场景的有效解决方案。 OP 问题是@Mike Bovenlander 提出的全局配置。

以上是关于Angular 2 Snackbar - 全局持续时间配置的主要内容,如果未能解决你的问题,请参考以下文章

Angular 材质 Snackbar 配置与自定义 panelClass 配置,用于错误、成功、警告消息

Angular (v5+) - Snackbar “openFromComponent”,组件通信

如何在服务上使用 SnackBar 以在 Angular 2 中的每个组件中使用

如何在 Angular 5 的 Angular 材质 Snackbar 中添加图标

Angular2 Material SnackBar 集成问题

Android Snackbar 持续时间