Как установить начальное значение для formArray? - PullRequest
1 голос
/ 18 июня 2020

Мне нужно установить начальное значение formArray для моей формы. Проверьте мой код:

Html:

            <div class="form-row form-group ingredients-drop">
                <button class="button" (click)="addAlias()">Add ingredients</button>
                <label>Kolicina</label>
                <div *ngFor="let ingredient of ingredients.controls; let i=index">
                    <input class="select add-ingredients" type="text" [formControlName]="i">
                </div>
            </div>

TS:

  allRecepies: any[] = [];
  selectedMeal: any
  form: FormGroup;


  ngOnInit() {
    this.getAllRecepies();
  }
  onChange(event) {
    this.allRecepies.map(obj => {
      if (obj.id == event.target.value) {
        this.selectedMeal = Object.assign(obj);
        console.log(this.form.value);
      }
    })
    this.editCity();
  }
  getAllRecepies() {
    this.mealService.getRecepies().subscribe(
      data => {
        this.allRecepies = data;
      }
    )
  } 

  editCity() {
    this.form.patchValue({
      name: this.selectedMeal.name ? this.selectedMeal.name : null,
      description: this.selectedMeal.description ? this.selectedMeal.description : null,
      preparationTime: this.selectedMeal.preparationTime ? this.selectedMeal.preparationTime : null,
      pictureUrl: this.selectedMeal.pictureUrl ? this.selectedMeal.pictureUrl : null,
      ingredients: this.selectedMeal.ingredients ? this.addMealArr() : null
    }) 
  } 
  addMealArr() {
    if(this.selectedMeal) {
     let a = this.selectedMeal.ingredients.map(obj => { return obj });
     return a;
    }
  }

  createForm() {
    this.form = this.formBuilder.group({
      name: [null],
      description: [null],
      preparationTime: [null],
      pictureUrl: [''],
      ingredients: this.formBuilder.array([
        this.formBuilder.control(this.addMealArr())
      ])
    });
  }

  get ingredients() {
    return this.form.get('ingredients') as FormArray;
  }
  addAlias() {
    this.ingredients.push(this.formBuilder.control(''));
  }

Возможно, это плохая практика, но мне нужен учебник для моей проблемы или stackblitz или можно кто-нибудь мне поможет? Мне нужно установить начальное значение с помощью patchValue, если это возможно? Или воспользоваться другим методом? Я не знаю, просто пришлите мне учебник, измените код или установите stackblitz? Мне нужно установить начальные значения и добавить новую строку или удалить существующую ..

1 Ответ

0 голосов
/ 18 июня 2020

Эй, вы можете установить начальные значения в FormGroup, как показано ниже:

recipes = [
    {
        ingredients: [
            {name: 'Grapes', amount: 12},
            {name: 'Potato', amount: 12}
        ]
    },
    { 
        ingredients: [
            {name: 'Banana', amount: 12},
            {name: 'Orange', amount: 12}
        ]
    }
];
let recipeIngredients = new FormArray([]);
const recipe = this.recipes[0];

if (recipe["ingredients"]) {
    for (let ingredient of recipe.ingredients) {
    recipeIngredients.push(
        new FormGroup({
        name: new FormControl(ingredient.name, Validators.required),
        amount: new FormControl(ingredient.amount, [Validators.required])
        })
    );
    }
}
this.recipeForm = new FormGroup({
    ingredients: recipeIngredients
});

Я создал рабочий пример stackblitz для той же демонстрации

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...