Рубрики
Без рубрики

Интуитивные декораторы RXWeb для угловых реактивных форм

В этой статье мы обсуждаем некоторые из полезных декораторов, используемых в большинстве сценариев, которые будут полезны для достижения цели, которая меньше усилий, более усилия, чистый чистый код вместе с лучшими практиками. Ниже…

Автор оригинала: Ushmi Dave.

В этой статье мы обсуждаем RXWeb Decorators, которые помогают нам уменьшить код шаблона HTML и сделать наш код более читабельным; так же:

  1. Показать сообщения об ошибках условно.
  2. Отключение FormControl условно без подписки любых формоблочных валючений,
  3. Условно назначить класс на элементе.

Если вы не знаете о проверке на основе декоратора в реактивных формах, используя RXWeb, то я бы предложил ссылаться на эту хорошую статью Реактивные формы на основе декоратора в угловом углу – эффективный способ проверки форм

Импортируйте декоратор после Установка @ RxWeb/Реактивные формы-валидаторы, после установки импорта RxreaCtiveFormsModule В основном модуле углового проекта

Мы приезжаем в состав многих случаев, когда нам нужно отключить контроль условно, другими словами отключить контроль на основе другого значения ввода. В этом случае поле лицензионного номера становится только тогда, когда возраст больше, чем равный 18

Пример Stackblitz: Открыть

Декоратор - Статья .gif.gif.

Это достигается с использованием следующих шагов

1) user.model.ts:

import { disable, prop } from "@rxweb/reactive-form-validators";
import { AbstractControl } from "@angular/forms";

export class User {
  @prop()
  age: number;

  @disable({
    conditionalExpression: function(control: AbstractControl) {
      return this.age <= 18 ? true : false;
    }
  }) 
  @prop()
  licenseNumber: string;
}

2) user.component.ts:

import { Component, OnInit } from '@angular/core';
import { FormGroup } from "@angular/forms";

import { RxFormBuilder } from '@rxweb/reactive-form-validators';
import { User } from './user.model';

@Component({
    selector: 'app-user-add',
    templateUrl: './user-add.component.html'
})

export class UserAddComponent implements OnInit {
    userFormGroup: FormGroup;
    constructor(private formBuilder: RxFormBuilder) { }

    ngOnInit() {
        let user = new User();
        this.userFormGroup = this.formBuilder.formGroup(user);
    }
}

3) user.component.html:

Настройка класса CSS на основе некоторого состояния в формате. В этом случае недействительный класс применяется, когда состояние касается или загрязнена и имеет ошибки

Декоратор-артикул1.gif.

Пример Stackblitz: Открыть

1) user.model.ts:

import {  prop,elementClass,alpha } from "@rxweb/reactive-form-validators"
import { AbstractControl } from "@angular/forms"

export class User {


   @elementClass({
       conditionalExpression: function (control:AbstractControl) {
           return (control.touched || control.dirty) && control.errors ? 'has- error' : '';
       }})
   @alpha()
   userName: string;
}

2) user.component.ts:

import { Component, OnInit } from '@angular/core';
import { FormGroup } from "@angular/forms";

import { RxFormBuilder } from '@rxweb/reactive-form-validators';
import { User } from './user.model';

@Component({
    selector: 'app-user-add',
    templateUrl: './user-add.component.html'
})

export class UserAddComponent implements OnInit {
    userFormGroup: FormGroup;
    constructor(private formBuilder: RxFormBuilder) { }

    ngOnInit() {
        let user = new User();
        this.userFormGroup = this.formBuilder.formGroup(user);
    }
}

3) user.component.html:

Этот декоратор используется для отображения ошибок в зависимости от некоторого состояния. В этом случае сообщения об ошибках отображаются, когда нажата кнопка отправки

Пример Stackblitz: Открыть

Декоратор-артикул2.gif.

1) Форма. Model.ts:

import { required,error,prop } from "@rxweb/reactive-form-validators"
import {AbstractControl } from "@angular/forms"
export class FormField{
  
  @prop()
  action:string;

  @error({conditionalExpression:function(control:AbstractControl){ return this.action === "submit"}})
  @required()
  firstName:string;

  @error({conditionalExpression:function(control:AbstractControl){ return this.action == "submit"}})
  @required()
  userName:string;
 
}

2) user.component.ts:

import { Component, OnInit } from '@angular/core';
import { FormGroup,Validators } from "@angular/forms"

import { RxFormGroup,FormGroupExtension,RxFormBuilder,FormBuilderConfiguration,RxwebValidators } from '@rxweb/reactive-form-validators';
import { FormField } from './form.model';


@Component({
    selector: 'app-user-add',
    templateUrl: './user-add.component.html'
})
export class UserAddComponent implements OnInit {
    errorObject = {}
    userInfoFormGroup: FormGroup

    constructor(
        private formBuilder: RxFormBuilder
    ) { }

    ngOnInit() {
      var formField = new FormField();
        this.userInfoFormGroup =this.formBuilder.formGroup(formField);
    }

    submit(){
      if(this.userInfoFormGroup.invalid)
        this.userInfoFormGroup.controls.action.setValue("submit");
      
    }
}

3) user.component.html:

{{userInfoFormGroup.controls.firstName["errorMessage"]}}
{{userInfoFormGroup.controls.userName["errorMessage"]}}

Эта статья показывает некоторые из лучших и наиболее используемых случаев, которые выполняются в наиболее интуитивно понятном и элегантном способе с использованием моделей на основе подхода, чтобы узнать больше о других полезных декораторах. Документация раздел