【问题标题】:How can i display Images / Star in a Material Angular Form我如何以材质角度形式显示图像/星
【发布时间】:2020-01-18 19:44:33
【问题描述】:

我有一个以星图形式显示评分的表单,我的后端将其存储为字符串格式的数字。因此,当我在玩 arround 时,我想知道实现这一目标的最佳材料输入是什么。到目前为止,我得到了这个

我使用下面的代码输入

<mat-form-field>
   <input matInput placeholder="Service Value"
    formControlName ="serviceValue">
    <span>
    <ng-container *ngFor="let[].constructor(NumberConverter(form.controls.serviceValue.value))">
       <img class="star" src="../../assets/images/basic-5-point-gold-star-beveled.jpg" />
    </ng-container>
   </span>
</mat-form-field>

如果没有更好的垫子控制来做到这一点,我如何摆脱值 5 并能够向上移动我的星星。我也希望它能帮助我摆脱这个指向本节的错误。

SurveyResponseComponent.html:113 错误 RangeError: 无效数组 长度 在 Object.eval [as updateDirectives] (SurveyResponseComponent.html:119) 在 Object.debugUpdateDirectives [as updateDirectives] (core.js:45258) 在 checkAndUpdateView (core.js:44270) 在 callViewAction (core.js:44636) 在 execComponentViewsAction (core.js:44564) 在 checkAndUpdateView (core.js:44277) 在 callViewAction (core.js:44636) 在 execEmbeddedViewsAction (core.js:44593) 在 checkAndUpdateView (core.js:44271) 在 callViewAction (core.js:44636)

【问题讨论】:

    标签: angular angular-material


    【解决方案1】:

    问题不在于图像,而在于 ngFor 语句

    let[].constructor(NumberConverter(form.controls.serviceValue.value))
    

    模板编译器将无法解析它。

    创建一个从数字返回数组的管道。

    import { Pipe, PipeTransform } from '@angular/core';
    
    @Pipe({
      name: 'arrayFromNumber'
    })
    export class ArrayFromNumberPipe implements PipeTransform {
      transform(length) {
        return Array.from({ length: length }, (_, i) => i);
      }
    }
    

    并使用它

    *ngFor="let i of form.controls.serviceValue.value| arrayFromNumber"
    

    查看此 StackBlitz https://stackblitz.com/edit/angular-mzvkyb

    【讨论】:

    • 我实际上能够通过在分配值时将 NumberConverter 从模板移动到控制器来修复错误。但这仍然没有解决我关于如何不显示 5 并将图像放置在输入框所在的主要问题
    • 应避免使用调用组件上的方法的模板,因为每次触发更改检测时都需要调用这些方法,这对性能造成巨大影响。这就是管道存在的原因,只有在管道的输入发生变化时才会调用它们。否则,您将在每个更改检测周期而不是仅在输入更新时不断地重新创建一个数组并重新绑定到该数组。
    • 谢谢,我的问题的解决方案比我想象的要简单,我只是将 设为了成功
    • 如果您希望用户能够点击星星alligator.io/angular/custom-form-control,这里有一篇关于使用 ControlValueAccessor 创建星星输入的文章
    • 谢谢,在我的情况下,我只需要显示值,因为用户输入是使用 jquery 和 ajax 完成的,以便为用户加载更小更快
    猜你喜欢
    • 2022-01-10
    • 2021-01-23
    • 2018-07-25
    • 1970-01-01
    • 2019-04-05
    • 2016-11-23
    • 2019-03-13
    • 1970-01-01
    • 2022-01-26
    相关资源
    最近更新 更多