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

use*_*143 5 javascript snackbar angular-material2 angular

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

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

this.snackBar.open(element.text, 'OK', config);
Run Code Online (Sandbox Code Playgroud)

但是,我需要为多个小吃店设置持续时间,而不必每次都传入配置。

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

谢谢!

Mik*_*der 5

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

您现在可以MatSnackBar通过使用提供程序为模块注入默认选项@NgModule

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 } }
    ]
})
Run Code Online (Sandbox Code Playgroud)

来源:Material Angular 文档


aho*_*try 1

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

export class Config {
    static apiUrl = "api/";
    static token = "";
    static snackBarDurration = 5000;
    ......
}
Run Code Online (Sandbox Code Playgroud)

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

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);
    }
}
Run Code Online (Sandbox Code Playgroud)