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

Zhu*_*Zhu 5 typescript angular-material angular

我对angular并不陌生,并且正在为UI使用Angular Material Design。

在我的应用程序中,我有一个小吃店。

现在我想在快餐栏上设置一个图标,但是我尝试了一些我无法设置的Stackoverflow帖子。

码:

this.snackBar.open('You are already registered.Please log in.','', { duration: 2000 });
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

我想将图标设置为图片中的图标,但是下面有没有图标的小吃店。我不知道如何添加它。

在此处输入图片说明

谁能帮我添加一下。

Siv*_*ywa 9

这是我做的

  1. 创建一个组件
  2. 为点心栏创建服务
  3. 将组件添加到模块。将其导入声明entryComponents中
  4. 使用服务

my-snackbar.component.ts

 import { Component, OnInit, Inject } from '@angular/core';
    import { MAT_SNACK_BAR_DATA } from '@angular/material';

    @Component({
      selector: 'my-snackbar',
      templateUrl: './snackbar.component.html',
      styleUrls: ['./snackbar.component.scss']
    })
    export class MySnackbarComponent implements OnInit {
      constructor(@Inject(MAT_SNACK_BAR_DATA) public data: any) {
        console.log(data); 
      }

      ngOnInit() {}

      get getIcon() {
        switch (this.data.snackType) {
          case 'Success':
            return 'done';
          case 'Error':
            return 'error';
          case 'Warn':
            return 'warning';
          case 'Info':
            return 'info';
        }
      }
    }
Run Code Online (Sandbox Code Playgroud)

......

my-snackbar.component.html

<div fxLayout="row" class="snack-container">
  <div>
    <mat-icon>{{getIcon}}</mat-icon>
  </div>
  <div>
    <span>{{data.message}}</span>
  </div>
</div>
Run Code Online (Sandbox Code Playgroud)

......

my-snack-bar.service.ts

import { Injectable } from '@angular/core';
import { MatSnackBar } from '@angular/material';
import { MySnackbarComponent } from '../components/snackbar/my-snackbar.component';

@Injectable({
  providedIn: 'root'
})
export class MySnackBarService {
  constructor(private snackBar: MatSnackBar) {}
  public openSnackBar(message: string, action: string, snackType?: snackType) {
    const _snackType: snackType =
      snackType !== undefined ? snackType : 'Success';

    this.snackBar.openFromComponent(SnackbarComponent, {
      duration: 2000,
      horizontalPosition: 'end',
      verticalPosition: 'top',
      data: { message: message, snackType: _snackType }
    });
  }
}
Run Code Online (Sandbox Code Playgroud)

........

app.module.ts

@NgModule({
  declarations: [
    SnackbarComponent
  ],
  imports: [
...
  ],
  providers: [],
  bootstrap: [AppComponent],
  entryComponents: [
    SnackbarComponent
  ]
})
export class AppModule {}
Run Code Online (Sandbox Code Playgroud)

.......

其他组件

import { Component, OnInit } from '@angular/core';
import { MySnackBarService } from '../../services/my-snack-bar.service';

@Component({
...
})
export class SomeComponent implements OnInit {

  constructor(
    private snack: MySnackService
  ) {}

  ngOnInit() {
  }


  openSnack() {
    this.snack.openSnackBar('Testing snack', '', 'Success');
  }
}
Run Code Online (Sandbox Code Playgroud)


PeS*_*PeS 7

尝试使用 Service 的openFromComponentopenFromTemplate方法MatSnackBar来代替普通的open