Как использовать mat-icon в MatSnackBar? - PullRequest
0 голосов
/ 25 ноября 2018

Я хочу отобразить значок при отображении сообщения из службы сообщений службы, которая использует MatSnackBar.(Модуль Материал импортируется в модуль приложения).

Однако снэк-панель по умолчанию не поддерживает значок.Как мне реализовать такую ​​функцию?

import { Injectable } from '@angular/core'
import {MatSnackBar} from '@angular/material/snack-bar';
import {MatSnackBarHorizontalPosition, MatSnackBarVerticalPosition} from "@angular/material";


@Injectable()

export class MessagesService {
    horizontalPosition: MatSnackBarHorizontalPosition = 'right';
    verticalPosition: MatSnackBarVerticalPosition = 'top';

    constructor(private snackBar: MatSnackBar) {
    }

    info(message: string) {
        const icon = `<mat-icon>info</mat-icon>`;
        const msg = `${icon} ${message}`;
        this.snackBar.open(msg, 'X', {
            duration: 2000,
            horizontalPosition: this.horizontalPosition,
            verticalPosition: this.verticalPosition,
            panelClass: ['info-message']
        });
    }
}

Ответы [ 2 ]

0 голосов
/ 22 марта 2019

Добавление к ответу Edric.

Если вы используете гибкий макет, вам не нужны дополнительные стили, чтобы выровнять содержимое закусочной.Просто оберните содержимое в div с правильными значениями layoutAlign.

0 голосов
/ 25 ноября 2018

Вы должны использовать пользовательский компонент снэк-бара, чтобы показать значок.К счастью, это должно быть похоже на то, как вы определяете диалоговое окно для отображения контента, просто это закусочная вместо диалога.

Можно передавать данные в закусочную, так же, как и передачу данных вдиалоговое окно.

Обратите внимание, что при объявлении закусочной вы также должны импортировать ее в свойстве entryComponents в объявлении NgModule.

Вот пример:

icon-snack-bar.component.ts

import { MAT_SNACK_BAR_DATA } from '@angular/material/snack-bar';
// ...

@Component({
  selector: '...',
  template: `<mat-icon>{{ data?.icon }}</mat-icon> <span>{{ data?.message }}</span>`
  // Most likely you have to add styles in order to position the icon, although I haven't tested it yet
export class IconSnackBarComponent {
  constructor(@Inject(MAT_SNACK_BAR_DATA) public data: any) { }
}

my-component.component.ts

import { IconSnackBarComponent } from './icon-snack-bar/icon-snack-bar.component';
import { MatSnackBar } from '@angular/material/snack-bar';
// ...

export class MyComponent {
  constructor(private snackBar: MatSnackBar) { }
  openCustomSnackBar() {
    this.snackBar.openFromComponent(IconSnackBarComponent, {
      data: {
        message: 'Hello, snackbar!',
        icon: 'info'
      }
    });
  }
}

app.module.ts

import { NgModule } from '@angular/core';
import { IconSnackBarComponent } from './icon-snack-bar/icon-snack-bar.component';
// ...

@NgModule({
  declarations: [
    // ...
    IconSnackBarComponent
  ],
  entryComponents: [
    IconSnackBarComponent
  ]
})
export class AppModule { }

Это также частично рассматривается в документах здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...