Возврат массива formbuilder из Observable - PullRequest
0 голосов
/ 17 сентября 2018

Мне нужно вернуть массив FormControl для элемента управления типа массива. Но мне нужно знать, сколько значений входит в мой Observable, чтобы иметь возможность монтировать эти данные.

Вот код:

users$ = this._store.select(usersSelectors.getUsers);

createForm(): void {
    this.myForm = this._formBuilder.group({
        users: this.buildArray(),
    });
}

buildArray(): any {
    this.users$.subscribe((data) => {
        if (data) {
            const values = data.map(() => new FormControl(false));
            return this._formBuilder.array(values);
        }
    });
}

Причина в том, что в HTML я могу создать динамический флажок с включенными пользователями для определенного действия.

component.html

<div class="col-md-3">
  <label for="users">Users</label>
  <div id="users" class="row">
    <div class="checkbox" class="col-sm-4"
      formArrayName="users"
      *ngFor="let item of myForm.get('users').controls; let i = index" >
      <label class="checkbox-inline">
        <input type="checkbox" [formControlName]="i"> {{ users$[i] }}
      </label>
    </div>

1 Ответ

0 голосов
/ 17 сентября 2018

Ну, во-первых, вы не возвращаете Наблюдаемое.Вы ничего не возвращаете (вы не добавили оператор возврата в свою функцию).

Кроме того, если вы добавите один, вы бы вернули подписку, потому что вы использовали subscribe в своей функции.

Если вы хотите создать массив форм из вашей наблюдаемой, вот как:

users$ = this._store.select(usersSelectors.getUsers);

createForm(): void {
  this.users$
    .pipe(
      filter(data => !!data),
      map(users => this._formBuilder.array(users.map(() => new FormControl(false))))
    )
    .subscribe(usersFormArray => this.myForm = this._formBuilder.group({
      users: usersFormArray
    })
  });
}

Вам не нужна другая функция, потому что эта функция делает все, что вы пожелаете.

Вы начинаете с фильтрации данных: это эквивалент условия.Если нет никаких данных, подписка не будет активирована.

Затем вы отображаете наблюдаемое значение, чтобы вернуть массив формы.

Наконец, вы подписываетесь и создаете форму с отображенным значением.

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