【问题标题】:ngBootstrap typeahead object is coming as input valuengBootstrap typeahead 对象作为输入值
【发布时间】:2020-07-01 08:35:43
【问题描述】:

我正在使用 NgBootstrap TypeAhead 在表单中集成查找。我有items json 如下:

type Item = {name: string, description: string};

const items:Item[] = [
    {"name":"NAME-1", "description":"Description -1"},
    {"name":"NAME-2", "description":"Description -2"},
]

并有一个格式化程序,例如:

 formatter = (item: Item) => {
     return item.name;     
 }

对于我添加的 HTML:

<input 
    id="typeahead-focus" 
    type="text" [formControlName]="idx" 
    (selectItem)="selectedItem($event, idx)" 
    [ngbTypeahead]="ItemSearch" 
    [inputFormatter]="formatter" 
    [resultFormatter]="formatter" 
    [editable]='false' 
/>

它工作正常,但我在提交表单时遇到了一个问题。我只需要name 索引作为输入字段的值。但它正在提交不需要的完整 JSON 对象。如何解决这个问题?

【问题讨论】:

  • 你能添加一个最小可重现的 sn-p 吗?

标签: javascript angular typescript ng-bootstrap typeahead


【解决方案1】:

您可以简单地,在提交中,在发送到服务之前,获取值

submit(form)
{
   if (form.valid)
      form.value.idx=form.value.idx.name
}

另一种方法是使用辅助变量“模型”并使用 [ngModel] 和 (ngModelChange) 之类的

<input id="typeahead-template" type="text" class="form-control"
        [ngModel]="model"  
        (ngModelChange)="model=$event;
           form.get('idx').setValue($event['name'])"
        [ngModelOptions]="{standalone:true}"
        [ngbTypeahead]="search" [resultTemplate]="rt"
        [inputFormatter]="formatter" />

小心,如果你使用这个,当创建你需要的表单时,你需要给“模型”赋值

【讨论】:

  • 是的。但是ngModalformControlName 一起使用并不好,对吧?我在这里使用FormArray,所以不确定,我可以删除formControlName
  • 不,您不能在相同的输入中使用 [(ngModel)] 和 formControlName,但在不属于formControl(想象一下,例如,您希望有一个复选框来隐藏/显示一组输入)。注意:如果您使用的是 formArray,请仔细考虑如何“到达”控件
猜你喜欢
  • 1970-01-01
  • 2017-03-24
  • 1970-01-01
  • 2021-06-21
  • 2014-09-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多