import { Component, OnDestroy, OnInit } from '@angular/core'; import { FormControl, FormGroup, Validators } from '@angular/forms'; import * as Module from './jessica-web'; import { validNumber } from '../util/validator/valid-number.validator'; import { Subscription } from 'rxjs'; import { debounceTime, filter, switchMap } from 'rxjs/operators'; @Component({ selector: 'lib-lib-jessica', templateUrl: './lib-jessica.component.html', styles: [], }) export class LibJessicaComponent implements OnInit, OnDestroy { private logger?: any; // Les données accessibles depuis le fichier html doivent être publiques. meyerhorForm: FormGroup; // Par convention, les variables observables ont pour suffixe $. private obs$!: Subscription; submit() { console.log(Number(this.meyerhorForm.value.width)); console.log(Number(this.meyerhorForm.value.load)); console.log(Number(this.meyerhorForm.value.eccentric)); } private instance?: any; constructor() { this.meyerhorForm = new FormGroup({ // Chaque champ doit être complété et être des nombres. width: new FormControl(null, [Validators.required, validNumber]), load: new FormControl(null, [Validators.required, validNumber]), eccentric: new FormControl(null, [Validators.required, validNumber]), }); Module.default().then(async (instance: any) => { this.instance = instance; this.logger = new this.instance.SpdlogStdoutMt('log'); }); } ngOnInit(): void { // On s'inscrit dans ngOnInit. this.obs$ = this.meyerhorForm.valueChanges // Limite à une requête toutes les 200ms. .pipe(debounceTime(200)) .pipe( // On n'applique l'action que si le formulaire est valide. filter( () => this.meyerhorForm.valid && this.instance !== undefined ), switchMap((/*data*/) => { ... return newvalue; }) ) // Applique la fonction subscribe pour chaque valeur dans switchMap. .subscribe((newvalue) => console.log(newvalue)); } ngOnDestroy(): void { // On se désinscrit dans ngOnDestroy pour éviter les fuites mémoires. this.obs$!.unsubscribe(); } }