在Angular中制作editForm的最简单方法是什么?

I3artosz

在我的数据库中,我有许多用户,其中有很多食谱。每个食谱都有一些特性和成分的集合。下面是截图

具有所有属性的食谱

因此,当用户在页面上显示要编辑的配方时,应该会显示(窗体)已加载当前数据的配方。这是一种工作方式,因为我可以看到数据,但我认为这做得不好。

我有没有数组(成分)的工作正常的形式。您能告诉我如何在编辑表单中添加成分吗?

如果您能看到我的代码并给我反馈并暗示我应该改变的地方,我将不胜感激。

export class RecipeEditComponent implements OnInit {
  @ViewChild('editForm') editForm: NgForm;
  recipe: IRecipe;
  photos: IPhoto[] = [];
  ingredients: IIngredient[] = [];
  uploader: FileUploader;
  hasBaseDropZoneOver = false;
  baseUrl = environment.apiUrl;
  
  currentMain: IPhoto;
  constructor(private route: ActivatedRoute, private recipeService: RecipeService,
    private toastr: ToastrService) { }

  ngOnInit(): void {
    this.loadRecipe();  
  }

  loadRecipe() {
    this.recipeService.getRecipe(this.route.snapshot.params.id).subscribe(recipe => {
      this.recipe = recipe;
      this.initializeUploader();
    })
  }
  updateRecipe(id: number) {
    this.recipeService.editRecipe(id, this.recipe).subscribe(next => {
      this.toastr.success('Recipe updated successfully');
      this.editForm.reset(this.recipe);
    }, error => {
      this.toastr.error(error);
    });
  }

}

的HTML

<div class="container mt-4 border" *ngIf="recipe">
    <form #editForm="ngForm" id="editForm" (ngSubmit)="updateRecipe(recipe.id)" >
      <h5 class=" text-center mt-2">Recipe details:</h5>
        <div class="form-group mt-3">
          <label for="city">Name</label>
          <input class="form-control" type="text" name="name" [(ngModel)]="recipe.name">
        </div>
        <div class="form-group">
          <app-ingredient-editor [ingredients] = "recipe.ingredients"></app-ingredient-editor>
          <div *ngFor="let ingredient of recipe.ingredients; let i = index">

            <input class="form-control" type="text" name="{{ingredient.name}}" [(ngModel)]="ingredient.name">
            <input class="form-control" type="text" name="{{ingredient.amount}}" [(ngModel)]="ingredient.amount">
          </div>
        </div>
        <div class="form-group">
          <br>
          <p>Add recipes</p>
        </div>
      <h5 class=" text-center mt-4">Description</h5>
        <angular-editor cols=100% rows="6" [placeholder]="'Your description'" [(ngModel)]="recipe.description"  name="description"></angular-editor>
    </form>  

    <button [disabled]="!editForm.dirty" form="editForm" class="btn btn-success btn-block mb-5 mt-5">Save changes</button>
  </div>

现在看起来像:

页面上的表格

当我在控制台上更改时删除成分名称时,出现以下错误:

recipe-edit.component.html:12 ERROR Error: If ngModel is used within a form tag, either the name attribute must be set or the form
      control must be defined as 'standalone' in ngModelOptions.

问题是那部分代码:

 <div *ngFor="let ingredient of recipe.ingredients; let i = index">
    
                <input class="form-control" type="text" name="{{ingredient.name}}" [(ngModel)]="ingredient.name">
                <input class="form-control" type="text" name="{{ingredient.amount}}" [(ngModel)]="ingredient.amount">
              </div>
            </div>

但是我不知道如何使它工作。

如何将添加数组添加到模板驱动的窗体? 就我而言,我需要显示当前成分并能够对其进行编辑。

我已经尝试过这样的事情:

<input class="form-control" type="text" name="ingredient[i].name" [(ngModel)]="ingredient[i].name">
            <input class="form-control" type="text" name="ingredient[i].amount" [(ngModel)]="ingredient[i].amount">

但是id不起作用

克里斯蒂安·拉米雷斯

问题在于,name必须定义表单上的属性,以使angular知道要更新哪个输入。您将名称绑定到与可编辑模型所设置的属性相同的属性,这意味着用户可以对其进行编辑并实际上将其删除,这是不好的。

解决方案是将其更改为不变的唯一值。这应该工作:

<div *ngFor="let ingredient of recipe.ingredients; let i = index">
    <input class="form-control" type="text" name="name{{ingredient.id}}" [(ngModel)]="ingredient.name">
    <input class="form-control" type="text" name="amount{{ingredient.id}}" [(ngModel)]="ingredient.amount">
  </div>
</div>

链接到stackblitz以显示其正常工作:https ://stackblitz.com/edit/angular-10-base-template-q243lw?file = src%2Fapp%2Fapp.component.html

编辑:修复了原始帖子中的错误,并添加了指向stackblitz的链接

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在HAML中增加ID的最简单方法是什么?

来自分类Dev

在 ionic3 应用程序中制作倒数计时器的最简单方法是什么?

来自分类Dev

制作多引导UEFI Windows / Linux / Mac(通用)DVD / BD的最简单方法是什么?

来自分类Dev

使OSX中的matplotlib在虚拟环境中工作的最简单方法是什么?

来自分类Dev

在此示例中,在tidyverse和ggplot中订购盒装图的最简单方法是什么?

来自分类Dev

在Powershell中增加字符串变量中数字的最快/最简单方法是什么?

来自分类Dev

检查BASH中的变量中是否存在字符的最简单方法是什么?

来自分类Dev

在python中从字典中打印选择的键值的最简单方法是什么

来自分类Dev

在本地安装Drupal的最简单方法是什么?

来自分类Dev

使用Egit压缩提交的最简单方法是什么?

来自分类Dev

在nginx上启用PHP的最简单方法是什么?

来自分类Dev

创建坐标列表的最简单方法是什么?

来自分类Dev

始终加载Clojure库的最简单方法是什么?

来自分类Dev

更改范围滑块颜色的最简单方法是什么?

来自分类Dev

消除相角不连续的最简单方法是什么

来自分类Dev

创建文件的最简单方法是什么?

来自分类Dev

从wsdl(cxf)生成代码的最简单方法是什么?

来自分类Dev

从Spark Stream写入Kafka的最简单方法是什么

来自分类Dev

从Byte []显示图像的最简单方法是什么?

来自分类Dev

从txt文件拆分列的最简单方法是什么

来自分类Dev

安装PostGIS的最简单方法是什么?

来自分类Dev

在nginx上启用PHP的最简单方法是什么?

来自分类Dev

在Debian上安装JRE的最简单方法是什么?

来自分类Dev

安装gem的最简单方法是什么?

来自分类Dev

计算类型令牌比率的最简单方法是什么?

来自分类Dev

执行公钥加密的最简单方法是什么?

来自分类Dev

生成Docker容器集群的最简单方法是什么?

来自分类Dev

升级Ghostscript的最简单方法是什么?

来自分类Dev

开始使用LaTeX的最简单方法是什么?

Related 相关文章

  1. 1

    在HAML中增加ID的最简单方法是什么?

  2. 2

    在 ionic3 应用程序中制作倒数计时器的最简单方法是什么?

  3. 3

    制作多引导UEFI Windows / Linux / Mac(通用)DVD / BD的最简单方法是什么?

  4. 4

    使OSX中的matplotlib在虚拟环境中工作的最简单方法是什么?

  5. 5

    在此示例中,在tidyverse和ggplot中订购盒装图的最简单方法是什么?

  6. 6

    在Powershell中增加字符串变量中数字的最快/最简单方法是什么?

  7. 7

    检查BASH中的变量中是否存在字符的最简单方法是什么?

  8. 8

    在python中从字典中打印选择的键值的最简单方法是什么

  9. 9

    在本地安装Drupal的最简单方法是什么?

  10. 10

    使用Egit压缩提交的最简单方法是什么?

  11. 11

    在nginx上启用PHP的最简单方法是什么?

  12. 12

    创建坐标列表的最简单方法是什么?

  13. 13

    始终加载Clojure库的最简单方法是什么?

  14. 14

    更改范围滑块颜色的最简单方法是什么?

  15. 15

    消除相角不连续的最简单方法是什么

  16. 16

    创建文件的最简单方法是什么?

  17. 17

    从wsdl(cxf)生成代码的最简单方法是什么?

  18. 18

    从Spark Stream写入Kafka的最简单方法是什么

  19. 19

    从Byte []显示图像的最简单方法是什么?

  20. 20

    从txt文件拆分列的最简单方法是什么

  21. 21

    安装PostGIS的最简单方法是什么?

  22. 22

    在nginx上启用PHP的最简单方法是什么?

  23. 23

    在Debian上安装JRE的最简单方法是什么?

  24. 24

    安装gem的最简单方法是什么?

  25. 25

    计算类型令牌比率的最简单方法是什么?

  26. 26

    执行公钥加密的最简单方法是什么?

  27. 27

    生成Docker容器集群的最简单方法是什么?

  28. 28

    升级Ghostscript的最简单方法是什么?

  29. 29

    开始使用LaTeX的最简单方法是什么?

热门标签

归档