angular - Angular Material 2 进度条叠加层
问题描述
我想在进行一些处理时显示进度条覆盖。我可以计算完成百分比,所以我想使用确定的进度条。对于覆盖部分,我想使用一个对话框。基本上,我想做的正是这里所做的(Angular 2 Material Progress Spinner: display as overlay),除了我不想要一个 Spinner。所以我的组件看起来像:
模板:
<mat-progress-bar mode="determinate" [value]="percent"></mat-progress-bar>
零件:
import {Component, Input} from '@angular/core';
@Component({
selector: 'progress-bar',
templateUrl: 'progress-bar.html'
})
export class ProgressBarComponent {
@Input() percent: number;
constructor() {}
}
然后我使用这个组件的代码是这样的:
const dialogRef: MatDialogRef<ProgressBarComponent> = this.dialog.open(ProgressBarComponent, {
panelClass: 'transparent',
disableClose: true
});
for (let i = 0; i < this.thingsToProcess.length; i++) {
percentDone = i / this.thingsToProcess.length;
// todo: Update dialogRef.ProgressBarComponent.percent
await this.myService.doProcessing(this.thingsToProcess[i]);
}
我的问题是如何绑定到 ProgressBarComponent 类上的“百分比”值?
我发现了这个(如何将数据传递到 angular material 2 的对话框),但它似乎只用于构造函数注入而不是绑定。
解决方案
我在这里试了一下:https ://stackblitz.com/edit/angular7-material-primeng-template-b4dvs8
思路还是使用构造函数注入,但是传递的值是对对象的引用,而不是静态值。你在你的主要组件中定义一个百分比对象:
percent = {percent: 10};
你将它传递给对话框,如:
this.dialog.open(ProgressbarComponent, {
panelClass: 'transparent',
disableClose: true,
data:{percent: this.percent}
});
然后,您可以绑定到此输入对象,例如:
<mat-progress-bar mode="determinate" [value]="data.percent.percent"></mat-progress-bar>
您可以在主组件中修改该值,它将反映在进度条中。我设置了一个计时器来将进度条值从 10 更改为 50 以用于演示目的。
您也可以使用通用服务来传递值。
推荐阅读
- python - Discord Bot Python add_roles
- c# - 如何在VS 2019上使用.net core版本v3.1.0-preview1?
- javascript - 获取整个 DOM 包装边界客户端矩形
- javascript - 通过 HOC 提供数据,但在调用组件属性时,类型“{}”中缺失但类型“”中出现错误
- vb.net - 在 Math.NET Symbolics 中,ArcCos 函数与 SymbolicExpression
- sql-server - 带有日期和 date-1 参数的存储过程
- apache-spark - Hadoop 数据管道用例
- java - Mockito 单元测试 - 错误放置或误用的参数匹配器
- javascript - 如何在 Chrome 中触发 onSelect Datalist
- python - 该代码应该在不满足条件时打印特定消息,但它会打印错误消息