Насколько конкретно числовой формат в методе angular2 toString?

Я хочу отформатировать свой номер в приложении angular2. Я хочу всегда быть из 8 номеров. ех. если я вставлю:

 12345678 -> 12345678
 123 -> 00000123
 123456 -> 00123456
 123456789 ->i'll display a modal error or message(don't care of this)

Я ищу, но нахожу только трубы, которые не могу использовать для этого случая. Thaks

3 ответа

Вы можете создать функцию для дополнения нулями

function pad(num, size) {
    var s = num + "";
    while (s.length < size)
       s = "0" + s;

    return s;
}

В вашем случае размер = 8

PAD-старт-polyfill.ts

полифилл из:

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/padStart)

декларация от:

https://github.com/Microsoft/TypeScript/blob/master/lib/lib.es2017.string.d.ts

interface String {
  padStart(targetLength: number, padString?: string): string;
}

// https://github.com/uxitten/polyfill/blob/master/string.polyfill.js
// https://developer.mozilla.org/enUS/docs/Web/JavaScript/Reference/Global_Objects/String/padStart

if (!String.prototype.padStart) {
  String.prototype.padStart = function padStart(targetLength, padString) {
    targetLength = targetLength >> 0; //floor if number or convert non-number to 0;
    padString = String(padString || ' ');
    if (this.length > targetLength) {
      return String(this);
    }
    else {
      targetLength = targetLength-this.length;
      if (targetLength > padString.length) {
        padString += padString.repeat(targetLength/padString.length); //append to original to ensure we are longer than needed
      }
      return padString.slice(0, targetLength) + String(this);
    }
  };
}

подушечка-start.pipe

import 'pad-start-polyfill';
import {Pipe} from '@angular/core';

@Pipe({name: 'padStart'}) export default class {
  transform(value: string, targetLength: number, padString = ' ') {
    return value.padStart(targetLength, padString);
  }
}

temaplate-usage.html

<span>
  {{value | padStart : 8 : '0'}}
</span>

Более легкий способ сделать это - объединить два ответа выше

ваш-pipe.pipe.ts

import { Pipe, PipeTransform } from '@angular/core';

@Pipe({
    name: 'minimalLenthNumber'
})
export class MinimalLenthNumberPipe implements PipeTransform {
    transform(num : number, size: number) : string {
        var s = num + "";
        while (s.length < size)
            s = "0" + s;
        return s;
    }
}

при импорте модулей, не пропустите импорт этого канала, в моем случае у меня есть файл app.module.ts, в котором есть все модули моего приложения

app.module.ts

import { MinimalLenthNumberPipe } from './pipes/minimal-lenth-number.pipe';

@NgModule({
    MinimalLenthNumberPipe
}

затем импортируйте MinimalLenthNumberPipe, где вы хотите его использовать

некоторые-page.component.ts

<some-tag> {{ 12 | minimalLenthNumber:  4 }} </some-tag>
<!-- the final result will be '0012'-->
Другие вопросы по тегам