Как обернуть компонент Primeng, такой как автозаполнение, с помощью реактивных форм?

Я хочу обернуть компонент автозаполнения Primeng в свой собственный компонент, но не могу понять, как предоставить formControlName:

Ошибка: необработано (в обещании): ошибка: formControlName должно использоваться с родительской директивой formGroup.

HTML-код компонента-оболочки:

<p-autoComplete
  [formControlName]="formControlName"
  [suggestions]="suggestions"
  [multiple]="multiple"
  [dropdown]="dropdown"
  (completeMethod)="search($event)">
</p-autoComplete>

Компонент-оболочка ts:

@Component({
  selector: 'logi-autocomplete',
  templateUrl: 'autocomplete.component.html',
  providers: [AUTOCOMPLETE_VALUE_ACCESSOR]
})
export class AutocompleteComponent implements OnInit, ControlValueAccessor {

  @Input() formControlName: string;

  @Input() multiple = true;
  @Input() dropdown = true;

  // Skipped non related code

  _value: any = '';
  get value(): any { return this._value; };
  set value(v: any) {
    if (v !== this._value) {
      this._value = v;
      this.onChange(v);
    }
  }

  writeValue(value: any) {
    this._value = value;
    this.onChange(value);
  }

  onChange = (_) => {};
  onTouched = () => {};
  registerOnChange(fn: (_: any) => void): void { this.onChange = fn; }
  registerOnTouched(fn: () => void): void { this.onTouched = fn; }
}

Использование компонента в пользовательском компоненте for:

<form [formGroup]="form">
    <logi-autocomplete
      [formControlName]="'groups'"
    ></logi-autocomplete>
</form>

person Abbraxar    schedule 02.06.2017    source источник


Ответы (1)


Вы должны написать код в HTML, где вы хотите встроить автозаполнение.

`

<span class="ui-fluid">
<p-autoComplete formControlName="autoComplete"field="label"completeMethod)="search($event)">
</p-autoComplete>
</span>
 <ul>
     <li *ngFor="let s of autoComplete">{{s.label}}
    </li>
 </ul>

`

и напишите код в своем компоненте, где вы будете передавать данные виджету автозаполнения.

autoComplete       = new FormControl(null, []);search(event){this.receiptDiarizationFacade.getSubjects(event.query).subscribe(value=>this.autoComplete=value);
}

В этом снимке кода я использовал observable вместо обещания, но вы можете использовать обещание

person Parvesh kumar    schedule 15.12.2017