在模型驱动形式(响应式)中将值设置为 ngtypeahead

Setting Value to ngtypeahead in Model Driven Form(Reactive)

我正在使用 Angular 响应式表单并通过 ng-bootstrap typeahead 获得 typeahead 字段。我有一个使用界面创建的状态列表,如下所示 -

export interface IContactStates {
   Id: number;
   Name: string;
}

通过服务填充状态列表,并在 component.ts 中将预输入初始化为 -

search = (text$: Observable<string>) =>
  text$
    .debounceTime(200)
    .distinctUntilChanged()
    .map(term => term === '' ? []
      : this.statesList.filter(v => 
v.Name.toLowerCase().indexOf(term.toLowerCase()) > -1).slice(0, 10))

formatter = (x: {Name: string}) => x.Name;

并且 ngbTypahead 在 html 模板中定义如下 -

<ng-template #rt let-r="result" let-t="term">
        {{ r.Name}}
      </ng-template>
    <div class="col-md-6">
        <div class="form-group input-group-sm"
            [ngClass]="{'has-error': displayMessage.State}">
            <label for="State">State</label>
            <input class="form-control form-control-sm" formControlName="State" 
            type="text" [ngbTypeahead]="search"
            [resultTemplate]="rt"
            [resultFormatter]="formatter"
            [inputFormatter]="formatter"            
            [editable]="false"
            placeholder="State (start typing the name and then select from list)"
            (selectItem)="selectItem($event)">
            <span class="help-block" *ngIf="displayMessage.State">
                {{displayMessage.State}}
            </span>
        </div>
    </div>

这在我创建新表单时工作正常,但当我尝试编辑任何已提交的表单时,状态控件值设置为未定义。我试图从 ng-bootstrap 帮助文档中获得有关设置 typeahead 值的任何提示,但没有运气。

好的。我让它工作。只需重新初始化表单控件元素即可。

更新 1 从服务器获取所选项目的值后,搜索对象并将其分配给我的表单控件。

const state = this.statesList.find(function(item){
        return item.Id === trader.State;

然后,用这个变量修补 Typeahead 控件。