angular - zamijeni broj na unosu broja ako je prevelik direktiva


Volio bih da unutar unosa, ako korisnik unese godinu uz trenutnu, brojevi budu zamijenjeni. Primjer: korisnik unese 2020., volio bih direktivu koja zamjenjuje 2020. s trenutnom godinom (2018.).

moj HTML kod:

<ion-item>
  <ion-label>year</ion-label>
  <ion-input type="number" [(ngModel)]="libro.year" name="data"></ion-input>
</ion-item>

Odgovor #1

Koristite direktiv za manipulaciju DOM-om. Direktiva dobiva DOM element na koji je "pridružena" i poboljšava ga s nekim vrstama značajki.
Koristite Pipe za manipulaciju podacima. Pipe prima podatke kao ulaz, transformira ih i ispisuje te podatke na drugi način.

Dakle, to je savršen slučaj upotrebe za Pipe

<ion-item>
      <ion-label>Anno</ion-label>
      <ion-input type="number" [ngModel]="libro.year|replace" (ngModelChange)="setYear($event)" name="data"></ion-input>
    </ion-item>
</ion-content>

Cijev

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

@Pipe({
  name: 'replace'
})
export class ReplacePipe implements PipeTransform {

  transform(value: any): any {
      if(parseInt(value)>2018)
        return '2018';
         return value;
  }

}

page.ts

setYear(event)
{
  this.year.libro=event;
}

UŽIVO DEMO

Odgovor #2

Probaj ovo.

U vašem component.ts

import { FormBuilder, FormGroup, Validators } from '@angular/forms';

public form: FormGroup;

constructor(private fb: FormBuilder) { 
    this.form = this.fb.group({
      year: [2018, Validators.required],
    }, {validator: this.validateField('year')});
}

private validateField(controllerName: string) {
    return (group: FormGroup) => {
      const nameFiled = group.controls[controllerName];
      if (nameFiled.value > new Date().getFullYear()) {
        nameFiled.setValue(new Date().getFullYear());
        return nameFiled.setErrors({invalidYear: true});
      } else {
        return nameFiled.setErrors(null);
      }
    };
}

U vašem predlošku.

<form [formGroup]="form">
  <ion-item>
      <ion-label>Anno</ion-label>
      <ion-input type="number" formControlName="year" name="data"></ion-input>
  </ion-item>
</form>

Napravio sam stackblitz za ovo. Pogledaj početnu stranicu.