gpt4 book ai didi

angular - 如何在 MatSnackBar 中使用垫子图标?

转载 作者:行者123 更新时间:2023-12-04 16:03:49 24 4
gpt4 key购买 nike

我想在显示来自使用 MatSnackBar 的服务消息服务的消息时显示一个图标. ( Material 模块在应用程序的模块中导入)。

但是,默认的 snackbar 不支持图标。我如何实现这样的功能?

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

最佳答案

您必须使用自定义 snackbar 组件才能显示图标。值得庆幸的是,这应该类似于您定义一个对话框来显示内容的方式,只是它是一个 snackbar 而不是一个对话框。

可以将数据传递到 snackbar ,就像将数据传递到对话框一样。

请注意,在声明 snackbar 时,您还必须将其导入 entryComponents属性(property)在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 { }

这也部分包含在文档 here 中.

关于angular - 如何在 MatSnackBar 中使用垫子图标?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53467501/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com