繁体   English   中英

修改我的代码,我想将 select 下拉列表替换为具有自动完成功能的输入框

[英]Modify my code, I want to replace select drop down list to input box with autocomplete feature

因为我是 angular 的菜鸟,所以我真的需要一个指导,比如我应该如何将这个 select 选项下拉列表替换为简单的输入框 I am fetching the data from api, currently I have limited data in my api so its working fine with select option drop down list but my api will contains lots of data so I dont want my users to scroll and search for the data. 相反,我希望他们输入并获取 select 该项目。 在这里我分享我的代码,我实现了 Select 选项下拉方法。 请将我的代码修改为该输入框。

  1. 元数据-service.service.ts
import { HttpClient } from '@angular/common/http';
import { Injectable } from '@angular/core';
import { Observable } from 'rxjs';
import { Pincodes } from 'src/app/Model/Pincodes';
import { baseURL } from 'src/environments/environment';

@Injectable({
  providedIn: 'root'
})
export class MetadataServiceService {

  constructor(private http:HttpClient) { }

  public GetPincodes() : Observable<any> {
    console.log("Calling GetPincodes API")
    return this.http.get("/Metadata/api/metadata/getpincodes") // My API Link
  }

}
  1. API 包含以下数据
{
  "program": null,
  "version": null,
  "dateTime": null,
  "success": true,
  "errorCode": null,
  "errorMessage": null,
  "message": "Pincodes read Successfully",
  "data": [
    {
      "pincode": 400708,
      "village": "Airoli",
      "taluka": "Thane",
      "district": "Thane",
      "state": "Maharashtra"
    },
    {
      "pincode": 416007,
      "village": "Kaamba",
      "taluka": "Kalyan",
      "district": "Thane",
      "state": "Maharashtra"
    },
    {
      "pincode": 421102,
      "village": "Atali",
      "taluka": "Kalyan",
      "district": "Thane",
      "state": "Maharashtra"
    },
    {
      "pincode": 421501,
      "village": "Ambarnath",
      "taluka": "Ambarnath",
      "district": "Thane",
      "state": "Maharashtra"
    },
    {
      "pincode": 421503,
      "village": "Ambeshiv",
      "taluka": "Ambarnath",
      "district": "Thane",
      "state": "Maharashtra"
    }
  ]
}
  1. Pincode.ts
export class Pincodes {
    pincode : number
    village : string
    taluka : string
    district : string
    state : string
}
  1. 注册页面.component.ts
import { Component, OnInit } from '@angular/core';
import { Pincodes } from '../classes/pincodes';
import { MetaDataService } from '../services/meta-data.service';
import { FormBuilder, FormControl } from '@angular/forms';
import { Observable } from 'rxjs';

@Component({
  selector: 'app-register-page',
  templateUrl: './register-page.component.html',
  styleUrls: ['./register-page.component.css']
})
export class RegisterPageComponent implements OnInit {
  observeData: Pincodes[]
  modifiedText: any;
  PinSelected: any = {}


  constructor(private _metaDataAPI: MetaDataService) {

  }

  ngOnInit() {
    this._metaDataAPI.getData().subscribe(data => {
      this.observeData = data;
    });

  }

  onPincodeSelected(val: Pincodes) {
    console.log("value" + val);
    this.customFunction(val)

  }
  customFunction(val: Pincodes) {
    // this.modifiedText = "The Selected Pin :  " + val.pincode +
    //  " and selected District is " + val.village
    this.modifiedText = "Selected Pin : " + val.pincode + "\n" +
      "District : " + val.district + "\n" +
      "Taluka : " + val.taluka


    console.log("Modified Text: " + this.modifiedText);
    console.log("Pincode Selected: " + this.PinSelected);
    console.log("observeData Selected: " + this.observeData);

  }


}

  1. 注册页面.component.html
<select
        [(ngModel)]="PinSelected"
        (ngModelChange)="onPincodeSelected($event)"
      >
        <option *ngFor="let pin of observeData" [ngValue]="pin">
          {{ pin.pincode }}
        </option>
      </select>
      <div>
        <p>{{ modifiedText }}</p>
      </div>

修改上面的代码,我再解释一次

我想实现自动完成输入框。 例如,在输入框中,当我输入400708时,它应该从 api 中获取所有数据,例如它的村庄、taluka、区、state。

您可以简单地使用带有预输入功能的 ng-select,按照此处提到的教程进行操作

https://www.freakyjolly.com/ng-select-typeahead-with-debouncetime-fetch-server-response/

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM