angular - 如何从内部元素关闭/关闭 Angular Snackbar 元素
问题描述
我目前有一个里面有一个snackbar
元素。mat-progress-bar
我想关闭snackbar
元素。我的代码目前看起来像这样。
import { MAT_SNACK_BAR_DATA, MatSnackBar } from '@angular/material';
import { map } from 'rxjs/operators';
@Component({
selector: 'app-upload-progress-snackbar',
template: `
Progress:
<mat-progress-bar mode="determinate" [value]="progress | async" *ngIf="progress !== undefined"></mat-progress-bar>`,
styles: [`mat-progress-bar { margin-top: 5px;}`],
})
export class UploadProgressComponent {
constructor(@Inject(MAT_SNACK_BAR_DATA) public data) { }
private started = false;
public progress = this.data.uploadProgress.pipe(
map(({ loaded, total }) => {
if (loaded === undefined) {
return !this.started ? 0 : 100;
} else {
this.started = true;
return Math.round(loaded / (total || loaded) * 100);
}
},
));
}
解决方案
您可以执行以下操作来实现此目的。
这snack-bar
就像mat-dialog
.. 你必须dismiss()
调用MatSnackBarRef
DIrenderer
和MatSnackBarRef
... 如果您要以其他方式关闭,则不需要渲染器,这仅用于演示目的。
@Inject(MAT_SNACK_BAR_DATA) public data,
private _snackRef: MatSnackBarRef<UploadProgressComponent>,
private ren:Renderer2
如果您想在进度条完成时关闭您可以调用dismiss()
该逻辑。我将在点击时关闭。
constructor
在您的...中创建单击事件侦听器
{
setTimeout(()=>{
let snackEl = document.getElementsByClassName('mat-snack-bar-container').item(0);
ren.listen(snackEl, 'click', ()=>this.dismiss())
})
创建你的dismiss()
dismiss(){
this._snackRef.dismiss();
}
堆栈闪电战
https://stackblitz.com/edit/angular-mdyher?embed=1&file=app/snack-bar-component-example.ts
推荐阅读
- node.js - 使用 dgram 发送消息的固定端口
- mysql - ADODB VBA mysql 查询要么给出 E_FAIL 要么截断数据
- javascript - 在滚动时更改活动类
- javascript - Vue PWA - manifest.json 在页面重新加载时被覆盖
- c# - 如何从 contactId 中检索 CRM 动态帐户记录
- flutter - 颤振抽屉背景图片
- amazon-web-services - 如何使用 Hashicorp Packer 创建在启动时运行 docker 映像的 EC2 映像?
- php - Mockery_0_wpdb 的意外错误使用通知
- php - 与 whereHas 的 ManyToMany Eloquent Laravel 查询问题
- python - 我可以确定一个函数在输入时会引发什么错误吗?