如何将来自 Ngx-bootstrap typeahead 的自动完成数据绑定到输入字段
How to bind autocomplete data from Ngx-bootstrap typeahead to input fields
我有以下预输入 returns 数据
<input [(ngModel)]="model" [class.is-invalid]="searchFailed" [inputFormatter]="inputFormatBandListValue"
[ngbTypeahead]="search" [resultFormatter]="resultFormatBandListValue" class="form-control"
id="typeahead-http"
name="Search" placeholder="Search" type="text" value="search"/>
<!-- <small *ngIf="searching" class="form-text text-muted">searching...</small>-->
<img *ngIf="searching" alt="Loading Icon" src="assets/img/user/loading.gif">
<div>
<p>{{model | json}}</p>
</div>
<input class="form-control" id="manufyear" name="manufyear" type="text">
<input class="form-control" id="location" name="location" type="text">
json格式{"Vehicle Name": "TOYOTA PRADO","MANUFACTURED YEAR":"2010", "LOCATION":"TOKYO"}
我如何绑定其他输入字段,以便当用户从自动完成输入中选择一个值时,其他字段会填充来自该选择的数据。我希望你们清楚。
您没有使用 NGX-Bootstrap (you are using NG Bootstrap),它们是完全不同的库。
您可以使用 selectItem
event 解决您的问题,ngbTypeahead Directive
HTML:
<input [(ngModel)]="model"
[class.is-invalid]="searchFailed"
[inputFormatter]="inputFormatBandListValue"
[ngbTypeahead]="search"
[resultFormatter]="resultFormatBandListValue"
class="form-control"
id="typeahead-http"
name="Search"
placeholder="Search"
type="text"
(selectItem)="onItemSelect($event)" <--------------- add this
value="search" />
<img *ngIf="searching" alt="Loading Icon" src="assets/img/user/loading.gif">
<div>
<p>{{model | json}}</p>
</div>
<input class="form-control" id="manufyear" name="manufyear" type="text">
<input class="form-control" id="location" name="location" type="text">
TS:
onItemSelect(event: NgbTypeaheadSelectItemEvent) {
const selectedObj = event.item // this is the selected object from the typeahead
// now you can set the other inputs values here...
}
我已经尝试过您的解决方案,但没有奏效。但是我找到了解决方案。在我的 ts 上,我有 model:any 而不是 model: any = [];所以数据没有作为对象数组返回。然后在我的 html 上我使用 ngModel [(ngModel)]="model.Vehicle Name" 进行绑定 所以我的代码是 <input [(ngModel)]="model.Vehicle Name" class="form-control" formControlName="vehiclename"
name="vehiclename" type="text"/>
和 ts model: any = [];
并且它有效。希望对某人有所帮助
我想你正在搜索这个:
<div class="form-group">
<label for="ArtistName">Band Name:</label>
<input id="ArtistName" type="text"
name="ArtistName"
class="form-control"
[(ngModel)]="album.Artist.ArtistName"
[ngbTypeahead]="search"
[resultFormatter]="resultFormatBandListValue"
[inputFormatter]="inputFormatBandListValue" <== THIS
#instance="ngbTypeahead"
/>
</div>
在 ts
inputFormatBandListValue(value: any) {
// do what ever you want
// now you can set the other inputs values here...
return value.yourAttribut; // this return what to show in imput
}
它是默认使用的,您不需要在 HTML 中使用它(如果您不想更改它)
希望它能有所帮助,即使我“战斗”有点晚了
此致
编辑:
问题出在 inputFormatter 上,但它仍可能对某些人有所帮助。
[resultFormatter] 似乎不起作用。
解决方法是:
<input type="text" formControlName="item_id" (selectItem)="onSelectItem($event)"
[ngbTypeahead]="search" [resultFormatter]="formatter"/>
onSelectItem(event: NgbTypeaheadSelectItemEvent): void {
event.preventDefault();
this.dataForm.patchValue({item_id: event.item.id});
}
来源:
https://github.com/ng-bootstrap/ng-bootstrap/issues/611#issuecomment-313939870
在我的例子中,我删除了 [inputFormatter]="inputFormatBandListValue" 并添加了 onSelectItem 以设置正确的值,它的工作非常好
示例:
<div class="form-group">
<label for="artistName">Band Name:</label>
<input id="artistName" type="text"
name="artistName"
class="form-control"
formControlName="artistName"
[ngbTypeahead]="search"
[resultFormatter]="resultFormatBandListValue"
(selectItem)="onSelectItem($event)
/>
</div>
onSelectItem(event: NgbTypeaheadSelectItemEvent): void {
event.preventDefault();
this.artistName.patchValue(event.item.id);
}
我有以下预输入 returns 数据
<input [(ngModel)]="model" [class.is-invalid]="searchFailed" [inputFormatter]="inputFormatBandListValue"
[ngbTypeahead]="search" [resultFormatter]="resultFormatBandListValue" class="form-control"
id="typeahead-http"
name="Search" placeholder="Search" type="text" value="search"/>
<!-- <small *ngIf="searching" class="form-text text-muted">searching...</small>-->
<img *ngIf="searching" alt="Loading Icon" src="assets/img/user/loading.gif">
<div>
<p>{{model | json}}</p>
</div>
<input class="form-control" id="manufyear" name="manufyear" type="text">
<input class="form-control" id="location" name="location" type="text">
json格式{"Vehicle Name": "TOYOTA PRADO","MANUFACTURED YEAR":"2010", "LOCATION":"TOKYO"}
我如何绑定其他输入字段,以便当用户从自动完成输入中选择一个值时,其他字段会填充来自该选择的数据。我希望你们清楚。
您没有使用 NGX-Bootstrap (you are using NG Bootstrap),它们是完全不同的库。
您可以使用 selectItem
event 解决您的问题,ngbTypeahead Directive
HTML:
<input [(ngModel)]="model"
[class.is-invalid]="searchFailed"
[inputFormatter]="inputFormatBandListValue"
[ngbTypeahead]="search"
[resultFormatter]="resultFormatBandListValue"
class="form-control"
id="typeahead-http"
name="Search"
placeholder="Search"
type="text"
(selectItem)="onItemSelect($event)" <--------------- add this
value="search" />
<img *ngIf="searching" alt="Loading Icon" src="assets/img/user/loading.gif">
<div>
<p>{{model | json}}</p>
</div>
<input class="form-control" id="manufyear" name="manufyear" type="text">
<input class="form-control" id="location" name="location" type="text">
TS:
onItemSelect(event: NgbTypeaheadSelectItemEvent) {
const selectedObj = event.item // this is the selected object from the typeahead
// now you can set the other inputs values here...
}
我已经尝试过您的解决方案,但没有奏效。但是我找到了解决方案。在我的 ts 上,我有 model:any 而不是 model: any = [];所以数据没有作为对象数组返回。然后在我的 html 上我使用 ngModel [(ngModel)]="model.Vehicle Name" 进行绑定 所以我的代码是 <input [(ngModel)]="model.Vehicle Name" class="form-control" formControlName="vehiclename"
name="vehiclename" type="text"/>
和 ts model: any = [];
并且它有效。希望对某人有所帮助
我想你正在搜索这个:
<div class="form-group">
<label for="ArtistName">Band Name:</label>
<input id="ArtistName" type="text"
name="ArtistName"
class="form-control"
[(ngModel)]="album.Artist.ArtistName"
[ngbTypeahead]="search"
[resultFormatter]="resultFormatBandListValue"
[inputFormatter]="inputFormatBandListValue" <== THIS
#instance="ngbTypeahead"
/>
</div>
在 ts
inputFormatBandListValue(value: any) {
// do what ever you want
// now you can set the other inputs values here...
return value.yourAttribut; // this return what to show in imput
}
它是默认使用的,您不需要在 HTML 中使用它(如果您不想更改它)
希望它能有所帮助,即使我“战斗”有点晚了
此致
编辑: 问题出在 inputFormatter 上,但它仍可能对某些人有所帮助。 [resultFormatter] 似乎不起作用。 解决方法是:
<input type="text" formControlName="item_id" (selectItem)="onSelectItem($event)"
[ngbTypeahead]="search" [resultFormatter]="formatter"/>
onSelectItem(event: NgbTypeaheadSelectItemEvent): void {
event.preventDefault();
this.dataForm.patchValue({item_id: event.item.id});
}
来源: https://github.com/ng-bootstrap/ng-bootstrap/issues/611#issuecomment-313939870
在我的例子中,我删除了 [inputFormatter]="inputFormatBandListValue" 并添加了 onSelectItem 以设置正确的值,它的工作非常好
示例:
<div class="form-group">
<label for="artistName">Band Name:</label>
<input id="artistName" type="text"
name="artistName"
class="form-control"
formControlName="artistName"
[ngbTypeahead]="search"
[resultFormatter]="resultFormatBandListValue"
(selectItem)="onSelectItem($event)
/>
</div>
onSelectItem(event: NgbTypeaheadSelectItemEvent): void {
event.preventDefault();
this.artistName.patchValue(event.item.id);
}