离子3输入掩码

时间:2017-07-19 18:37:11

标签: angular ionic-framework ionic3

屏蔽离子输入元素的最佳方法是什么?例如电话号码......类似这样:

<ion-input type="tel" placeholder="celular" name="celular"
 [(ngModel)]="phone_number" required
 mask="(**)*****-****" ></ion-input>

1 个答案:

答案 0 :(得分:3)

  • 3个步骤:

  • ==&gt; 1 - 制定指令。

  • ==&gt; 2 - 通过放入声明数组导入主模块。
  • ==&gt; 3 - 在html文件中使用该指令。

步骤1

    import { Directive, Attribute } from '@angular/core';
    import { NgModel } from '@angular/forms';
    @Directive({
      selector: '[mask]',
      host: {
          '(keyup)': 'onInputChange($event)'
      },
      providers: [NgModel]
    })
    export class Mask {
        maskPattern: string;
        placeHolderCounts: number;
        dividers: string[];
        modelValue: string;
        viewValue: string;

        constructor(
            public model: NgModel,
            @Attribute("mask") maskPattern: string
        ) {
            this.dividers = maskPattern.replace(/\*/g, "").split("");
            this.dividers.push(" ");
            this.generatePattern(maskPattern);
    }

    onInputChange(event) {
        this.modelValue = this.getModelValue(event);
        let stringToFormat = this.modelValue;
        if (stringToFormat.length < 10) {
            stringToFormat = this.padString(stringToFormat);
        }

        this.viewValue = this.format(stringToFormat);
        this.writeValue(event.target, this.viewValue);
    }

    writeValue(target, value) {
        return target.value = value;
    }

    generatePattern(patternString) {
        this.placeHolderCounts = (patternString.match(/\*/g) || []).length;
        for (let i = 0; i < this.placeHolderCounts; i++) {
            patternString = patternString.replace('*', "{" + i + "}");
        }
        this.maskPattern = patternString;
    }

    format(s) {
        var formattedString = this.maskPattern;
        for (let i = 0; i < this.placeHolderCounts; i++) {
            formattedString = formattedString.replace("{" + i + "}",         s.charAt(i));
            }
            return formattedString;
        }

        padString(s) {
            var pad = "          ";
            return (s + pad).substring(0, pad.length);
        }

        getModelValue(event) {
            var modelValue = event.target.value;
            for (var i = 0; i < this.dividers.length; i++) {
                while (modelValue.indexOf(this.dividers[i]) > -1) {
                    modelValue = modelValue.replace(this.dividers[i], "");
                }
            }
            return modelValue;
        }
    }
  • 步骤2

    import { Mask } from'./Mask';
    @NgModule({
      declarations: [
        MyApp,
        HomePage,
        Mask
    ],
    
  • 步骤3

    <form>
        <ion-list>
          <ion-item>
            <ion-input type="text" mask="(**)****-****"></ion-input>
          </ion-item>
        </ion-list>
        <button ion-button block type="submit">Save</button>
      </form>