An Angular Material package for entering and validating international telephone numbers. It adds a flag dropdown to any input, detects the user's country, displays a relevant placeholder and provides formatting/validation methods. Adapted for exanic to seperate country code selection from phone input.
Supports:
- Angular 15
- Angular Material 15
- ReactiveFormsModule
- FormsModule
- Validation with libphonenumber-js
- select search with ngx-mat-select-search
$ npm install libphonenumber-js --save
$ npm install ngx-mat-select-search
$ npm install ngx-mat-intl-tel-input --save
Add NgxMatIntlTelInputComponent to your component file:
imports: [NgxMatIntlTelInputComponent];If close icon is not displayed correctly on ngx mat select search, try adding:
to your index.html
Refer to main app in this repository for working example.
<form #f="ngForm" [formGroup]="phoneForm">
  <ngx-mat-intl-tel-input [preferredCountries]="['us', 'gb']" [enablePlaceholder]="true" [enableSearch]="true" name="phone" describedBy="phoneInput" formControlName="phone"></ngx-mat-intl-tel-input>
</form><form #f="ngForm" [formGroup]="phoneForm">
  <ngx-mat-intl-tel-input
  [enablePlaceholder]="true"
  [enableSearch]="true"
  name="phone"
  (countryChanged)="yourComponentMethodToTreatyCountryChangedEvent($event)" // $event is a instance of current select Country
  formControlName="phone"></ngx-mat-intl-tel-input>
</form>If you want to show the sample number for the country selected or errors , use mat-hint and mat-error as
<form #f="ngForm" [formGroup]="phoneForm">
  <ngx-mat-intl-tel-input [preferredCountries]="['us', 'gb']" [onlyCountries]="['us', 'gb', 'es']" [enablePlaceholder]="true" name="phone" formControlName="phone" #phone></ngx-mat-intl-tel-input>
  <mat-hint>e.g. {{phone.selectedCountry.placeHolder}}</mat-hint>
  <mat-error *ngIf="f.form.controls['phone']?.errors?.required">Required Field</mat-error>
  <mat-error *ngIf="f.form.controls['phone']?.errors?.validatePhoneNumber">Invalid Number</mat-error>
</form>| Options | Type | Default | Description | 
|---|---|---|---|
| onlyCountries | string[] | [] | List of manually selected country abbreviations, which will appear in the dropdown. | 
| inputPlaceholder | string | undefined | Placeholder for the input component. | 
| enablePlaceholder | boolean | true | Input placeholder text, which adapts to the country selected. | 
| searchPlaceholder | string | Search ... | Placeholder text for the search input in the country dropdown. | 
| enableSearch | boolean | false | Whether to display a search bar to help filter down the list of countries | 
| format | string | default | Format of "as you type" input. Possible values: national, international, default | 
| describedBy | string | undefined | Use aria-described by with the input field | 
| phoneLabel | string | Number | Label for the phone number input field. | 
- Fork repo.
- Go to ./projects/ngx-mat-intl-tel-input
- Update ./src/libwith new functionality.
- Update README.md
- Pull request.
- increase version number in: projects/ngx-mat-intl-tel-input/package.json
- Build lib and create package from root: $ npm run package
- Copy license and readme files from root: $ npm run copy-files(use git bash if cp error)
- cd into dist/ngx-mat-intl-tel-input & run npm publish
Running npm run start in root allows you to test changes made to the library.