代码之家  ›  专栏  ›  技术社区  ›  Marshall Tigerus

向材料自动完成添加加载指示器

  •  0
  • Marshall Tigerus  · 技术社区  · 6 年前

    我正在处理Angular5的材质组件,并且有一个表单控件,它是由服务调用驱动的自动完成功能不幸的是,在服务调用完成之前,不会显示自动完成功能,而且由于我们目前遇到的一些网络延迟问题,大多数用户在服务调用完成之前都已完成键入。我想显示某种视觉指示器,表示自动完成正在加载,但无法确定如何加载。

    我们尝试的廉价解决方案是用工作“加载”填充自动完成菜单,但是这需要调整我们的过滤,以便当有人开始键入一个不是以l开头的值时,它不会立即被压扁。

    以下是其中一个字段的HTML基础:

    <mat-form-field [hideRequiredMarker]="true">
        <input matInput [(ngModel)]="size" type="text" 
                 placeholder="{{'OPTIONS.SIZE' | translate}}"
                 [matAutocomplete]="autoSize"
                 readonly="{{!model}}"
                 (keyup)="filterSizes()"
                 matTooltip="{{ 'OPTIONS.MODEL_REQUIRED' | translate }}" 
                 [matTooltipDisabled]="model != ''" />
    
        <mat-autocomplete #autoSize="matAutocomplete">
           <mat-option *ngFor="let completeSize of filteredSizeNames" [value]="completeSize">
              {{completeSize}}
           </mat-option>
        </mat-autocomplete>
    </mat-form-field>
    

    服务调用在完成时填充filteredsizenames变量。我看了看 the material component pages 没有多少运气就想出了解决办法。

    1 回复  |  直到 6 年前
        1
  •  3
  •   G. Tranter    6 年前

    使用绑定到“loading”变量的不确定进度指示器,该变量在服务调用启动时“打开”,在服务返回时关闭。一种方法是在表单字段中放置一个进度圆作为前缀或后缀。您还可以使用一个进度条,它的样式是将它直接放置在表单域的下划线上(这是一个很大的工作,以获得正确的位置,但它可以做到,看起来相当光滑)。

    一个更简单的解决方案是使用表单域标签文本以同样的方式更新。