ã¯ããã«
ææ°ã®ãªã³ã©ã€ã³ãã³ãã³ã°ã·ã¹ãã ã®èšèšã¯ãããªãè€éãªäœæ¥ã§ãã åæã«ãã¢ããªã±ãŒã·ã§ã³ã®ã¯ã©ã€ã¢ã³ãéšåãéçºããããã®å€ãã®ã¿ã¹ã¯ã¯ãããã€ãã®æ
å ±æºããã»ãŒåæã«æ¥ã倧éã®ããŒã¿ã®åŠçã«é¢é£ããŠããŸãã ãªã¢ãŒããã³ãã³ã°ã·ã¹ãã ïŒRBSïŒãã€ã³ã¹ã¿ã³ãã¡ãã»ãŒãžã³ã°ãµãŒãã¹ãããŸããŸãªæ
å ±ãµãŒãã¹ããã®ããŒã¿ãããã§ãªã¢ã«ã¿ã€ã ã«åä¿¡ããŠåŠçããå¿
èŠããããŸãã ãã®çš®ã®åé¡ã解決ããããã«ãä»æ¥ã§ã¯ãªã¢ã¯ãã£ãããã°ã©ãã³ã°ææ³ãåºã䜿çšãããŠããŸãã
åºçŸ©ã®ããªã¢ã¯ãã£ãããã°ã©ãã³ã°ããšããçšèªã¯ãããŒã¿ã¹ããªãŒã ã®ç¶æ
ãåŠçããçµæãšããŠã·ã¹ãã ã®å€æŽã®äŒæãçºçãããã¢ããªã±ãŒã·ã§ã³ã®ãã®ãããªç·šæãæå³ããŸãã ãã®æ¹æ³ã®éèŠãªåé¡ã¯ãæ
å ±ãããŒã®æ瀺ã®åçŽããšãæ瀺çµæã®éåæåŠçäžã«çºçãããšã©ãŒã«å¯Ÿå¿ããå¯èœæ§ã§ãã
çãæå³ã§ã¯ããªã¢ã¯ãã£ãWeb UIããã°ã©ãã³ã°ã¯ãRxJsã©ã€ãã©ãªãªã©ã®æ¢è£œã®éçºè
ããŒã«ã䜿çšããããšãæå³ããŸãã ãã®ã©ã€ãã©ãªã¯ãObservableãªããžã§ã¯ãã䜿çšããŠããŒã¿ã·ãŒã±ã³ã¹ã®é¢æ£è¡šçŸãæäŸããŸããããã¯ãç¹å®ã®ééã§ã¢ããªã±ãŒã·ã§ã³ã«å
¥åãããæ
å ±ã®ãœãŒã¹ãšããŠæ©èœããŸãã
äžå°äŒæ¥åãã®ãªã³ã©ã€ã³ãã³ã¯ã®Webã€ã³ã¿ãŒãã§ã€ã¹ãèšèšããäŸã§ãã©ã€ãã©ãªã䜿çšããæ©èœãæ€èšããŠãã ããã UIãéçºããéãçµã¿èŸŒã¿ã®RxJsã©ã€ãã©ãªããŒãžã§ã³6ãåããGoogle Angular 6ãã©ãããã©ãŒã ã䜿çšããŸããã
ãªã¢ã¯ãã£ãUIãã¶ã€ã³ã¿ã¹ã¯
ãŠãŒã¶ãŒã«ãšã£ãŠãã€ã³ã¿ãŒããããã³ãã³ã°ã®ã»ãšãã©ã®æäœã¯ãå€ãã®å Žå3ã€ã®æ®µéã«åããããŸãã
- ãªã¹ãããå¿
èŠãªæäœãéžæããŸããããšãã°ãããŒã³ã®è¿æžãå£åº§ã®è£å
ã
- 察å¿ãããã©ãŒã ã®éšåçãªèšå
¥ïŒæ¯æãã®è©³çŽ°ã¯ãçµç¹ã®ååãŸãã¯ãŠãŒã¶ãŒãå
¥åããåå人ã®ååã«ãã£ãŠèªåçã«å
¥åãããŸãïŒ;
- SMSã¡ãã»ãŒãžãŸãã¯é»å眲åã䜿çšããæäœã®èªå確èªã
éçºè
ã®èŠ³ç¹ããããããã®æ®µéã®å®è£
ã«ã¯ã次ã®ã¿ã¹ã¯ã®ãœãªã¥ãŒã·ã§ã³ãå«ãŸããŸãã
- RBSã·ã¹ãã ã®ã¹ããŒã¿ã¹ããã§ãã¯ãããªã¹ãå
ã®æäœã«é¢ããããŒã¿ã®é¢é£æ§ã確èªããŸãã
- ãŠãŒã¶ãŒãå
¥åããæ
å ±ã¡ãã»ãŒãžãµãŒãã¹ïŒéè¡ã®ååãTINãBICãªã©ïŒããåä¿¡ããããŒã¿ãå«ãããã©ãŒã ãžã®å
¥åæã®ããŒã¿ãããŒã®éåæåŠçã
- å®æãããã©ãŒã ã®æ€èšŒ;
- ãã©ãŒã å
ã®ããŒã¿ã®èªåä¿åã
RBSã·ã¹ãã ã®ã¹ããŒã¿ã¹ã®ç¢ºèª
RBã·ã¹ãã ããé¢é£ããŒã¿ãååŸããããã»ã¹ãããšãã°ãã¯ã¬ãžããã©ã€ã³ãæ¯æã泚æã®ã¹ããŒã¿ã¹ã«é¢ããæ
å ±ã«ã¯ã2ã€ã®æ®µéããããŸãã
- ããŒã¿ã®å¯çšæ§ã¹ããŒã¿ã¹ã®ç¢ºèªã
- æŽæ°ãããããŒã¿ãåä¿¡ããŸãã
ããŒã¿ã®çŸåšã®ç¶æ
ã確èªããããã«ãäžå®ã®æéãããã³ããŒã¿ã®æºåç¶æ³ã«é¢ããå¿çãåä¿¡ãããŸã§ãã·ã¹ãã ã®APIã«å¯ŸããŠã¯ãšãªãå®è¡ãããŸã
RBã·ã¹ãã ã«ã¯ããã€ãã®å¯èœãªçãããããŸãã
- {emptyïŒtrue}-ããŒã¿ã¯ãŸã æºåãã§ããŠããŸããã
- ã¯ã©ã€ã¢ã³ãã¯æŽæ°ãããããŒã¿ãåä¿¡ã§ããŸãã
{ empty: false
ãã®çµæãé¢é£ããŒã¿ã¯æ¬¡ã®åœ¢åŒã§ååŸãããŸãã
const MIN_TIME = 2000; const MAX_TIME = 60000; const EXP_BASE = 1.4; request()
段éçã«åæããŸãããïŒ
- ãªã¯ãšã¹ããéä¿¡ããŸãã ãªã¯ãšã¹ãïŒïŒ
- çãã¯æ¡å€§ããŸãã Expandã¯ãã¹ã¬ãããæ£åžžã«å®äºããããšãå ±åãããŸã§ãå
éšããã³å€éšObservableã®æ¬¡ã®ã¢ã©ãŒãããšã«ããããã¯å
ã®ã³ãŒããååž°çã«ç¹°ãè¿ãRxJSã¹ããŒãã¡ã³ãã§ãã ãããã£ãŠãã¹ããªãŒã ãå®äºããã«ã¯ã次ã®åäžã®EMPTYãååšããªãããã«ããã®ãããªObservableãè¿ãå¿
èŠããããŸãã
- å¿çã{emptyïŒtrue}ã®å Žåãäžå®ã®æéé
延ïŒdelayTimeïŒã®åŸã«2çªç®ã®èŠæ±ãè¡ããŸãã ãµãŒããŒããªã¯ãšã¹ãã§éè² è·ã«ãªããªãããã«ãæ°ãããªã¯ãšã¹ãããšã«pingã®æéééãå¢ãããŸãã
- 次ã®ãªã¯ãšã¹ãäžã«ä»ã®äœããå¿çããå Žåãpingãåæ¢ãïŒEMPTYãè¿ããŸãïŒãæåŸã®ãªã¯ãšã¹ãã®çµæããµãã¹ã¯ã©ã€ããŒã«è¿ããŸãïŒæåŸã®ïŒïŒæŒç®åïŒ
- åçãåãåã£ãåŸãçµæãååŸããŠåŠçããŸãã ãã©ãŒã ã®ãªããžã§ã¯ãããµãã¹ã¯ã©ã€ããããŸãïŒ
{ empty: false
ãªã¢ã¯ãã£ããã©ãŒã
Angularãã¬ãŒã ã¯ãŒã¯ã®ReactiveFormsã©ã€ãã©ãªã䜿çšããŠãæ¯æãããã¥ã¡ã³ãã®ãªã¢ã¯ãã£ãWebãã©ãŒã ãèšèšããã¿ã¹ã¯ãæ€èšããŠãã ããã
ã©ã€ãã©ãªFormControlãFormGroupãFormArrayã®3ã€ã®åºæ¬ã¯ã©ã¹ã䜿çšãããšããã©ãŒã ãã£ãŒã«ãã®å®£èšçãªèšè¿°ã䜿çšãããã£ãŒã«ãã®åæå€ãèšå®ããåãã£ãŒã«ãã®æ€èšŒã«ãŒã«ãèšå®ããããšãã§ããŸãã
this.myForm = new FormGroup({ name: new FormControl('', Validators.required),
å€æ°ã®ãã£ãŒã«ããæã€ãã©ãŒã ã®å ŽåãFormBuilderãµãŒãã¹ã䜿çšããã®ãäžè¬çã§ããããã«ãããããã³ã³ãã¯ããªã³ãŒãã䜿çšããŠãã©ãŒã ãäœæã§ããŸãã
this.myForm = this.fb.group({ name: ['', Validators.required], surname: '' });
æ¯æã泚æããŒãžã®ãã³ãã¬ãŒãã«ãã©ãŒã ãäœæããåŸãmyFormãã©ãŒã ãžã®ãªã³ã¯ããã£ãŒã«ãåãšå§ã®ååãæå®ããã ãã§ååã§ãã
<form [formGroup]="myForm"> <label>Name: <input formControlName="name"> </label> <label>Surname: <input formControlName="surname"> </label> </form>
çµæãšããŠåŸãããèšèšã«ããããŠãŒã¶ãŒå
¥åã®çµæãšããŠãã¢ããªã±ãŒã·ã§ã³ã®ããžãã¹ããžãã¯ã«åºã¥ããŠããã©ãŒã ãã£ãŒã«ããééããæ
å ±ã®ãããŒãçæããã³è¿œè·¡ã§ããŸãã ãããè¡ãã«ã¯ãValueChangesãã©ãŒã ã®éåæãªãã¶ãŒããŒã«ãã£ãŠçæãããã€ãã³ãããµãã¹ã¯ã©ã€ãããã ãã§ã
this.myForm.valueChanges .subscribe(value => { âŠ
ãŠãŒã¶ãŒãåä¿¡è
ã®TINãŸãã¯çµç¹åãå
¥åãããšãã«ãæ¯æãå
ã®è©³çŽ°ãèªåçã«å
¥åããããã®èŠä»¶ãââããžãã¹ããžãã¯ã§å®çŸ©ãããŠãããšããŸãã ãŠãŒã¶ãŒãçµç¹ã®TIN /ååã«å
¥åããããŒã¿ãåŠçããããã®ã³ãŒãã¯æ¬¡ã®ããã«ãªããŸãã
this.payForm.valueChanges .pipe( mergeMap(value => this.getRequisites(value))
æ€èšŒ
ããªããŒã¿ã«ã¯æ¬¡ã®2ã€ã®åœ¢åŒããããŸãã
åæããªããŒã¿ã«å®æçã«ééããŸã-ãããã¯ããã£ãŒã«ããæäœãããšãã«å
¥åãããããŒã¿ããã§ãã¯ããé¢æ°ã§ãã ãªã¢ã¯ãã£ããã©ãŒã ã«é¢ããŠïŒ
ãåæããªããŒã¿ãŒã¯ãå¶åŸ¡åœ¢åŒãåãããšã©ãŒãããå Žåã¯çå®ã®å€ãè¿ãããã以å€ã®å Žåã¯åœç©ãè¿ãé¢æ°ã§ããã
function customValidator(control) { return isInvalid(control.value) ? { code: "mistake", message: "smth wents wrong" } : null; }
ãã¹ããŒãã以åã«èå¥ææžã®ã¿ã€ããšããŠç€ºãããŠããå ŽåããŠãŒã¶ãŒããã©ãŒã ã§äžé£ã®ææžã瀺ãããã©ããã確èªããããªããŒã¿ãŒãå®è£
ããŸãã
function requredSeria(control) { const docType = control.parent.get("docType"); let error = null; if (docType && docType.value === "passport" && !control.value) { error = { code: "wrongSeria", message: " " } } return error; }
ããã§ã¯ã芪ãã©ãŒã ãåç
§ããããã䜿çšããŠå¥ã®ãã£ãŒã«ãã®å€ãååŸããŸãã ãšã©ãŒãšããŠtrueãè¿ãããšãã§ããŸãããããã®å Žåã¯å¥ã®æ¹æ³ã§è¡ãããšã«ããŸããã ãããã®ãšã©ãŒã¡ãã»ãŒãžã¯ãã³ã³ãããŒã«ãŸãã¯ãã©ãŒã ã®ãšã©ãŒãã£ãŒã«ãã§ãã£ããã§ããŸãã ãã£ãŒã«ãã«è€æ°ã®ããªããŒã¿ãããå Žåãã©ã®ããªããŒã¿ãç®çã®ãšã©ãŒã¡ãã»ãŒãžã®è¡šç€ºã«å€±æããããæ£ç¢ºã«æå®ããããä»ã®ãã£ãŒã«ãã®æ€èšŒã調æŽãããã§ããŸãã
ããªããŒã¿ã¯æ¬¡ã®ããã«ãã©ãŒã ã«è¿œå ãããŸãã
this.documentForm = this.fb.group({ docType: ['', Validators.required], seria: ['', requredSeria], number: '' });
ããã«äœ¿çšã§ããããã€ãã®ããªããŒã¿ãŒãå©çšã§ããŸãã ãããã¯ãã¹ãŠValidatorsã¯ã©ã¹ã®éçã¡ãœããã§è¡šãããŸãã ããªããŒã¿ãäœæããæ¹æ³ããããŸãã
1ã€ã®ãã£ãŒã«ããééã£ãŠãããšãããã«ãã©ãŒã å
šäœãç¡å¹ã«ãªããŸãã ããã¯ããã©ãŒã ã«å°ãªããšã1ã€ã®ç¡å¹ãªãã£ãŒã«ããããå Žåã«ãç¹å®ã®[OK]ãã¿ã³ãç¡å¹ã«ããå¿
èŠããããšãã«äœ¿çšã§ããŸãã ãã®åŸããã¹ãŠã1ã€ã®æ¡ä»¶ãmyform.invalidãããã§ãã¯ããããšã«ãªããŸããããã¯ããã©ãŒã ãç¡å¹ãªå Žåã«trueãè¿ããŸãã
éåæããªããŒã¿ãŒã«ã¯ãæ»ãå€ã®ã¿ã€ããšãã1ã€ã®éãããããŸãã çå®ãŸãã¯åœã®å€ã¯ãçŽæãŸãã¯ãªãã¶ãŒããã«ã§æž¡ãå¿
èŠããããŸãã
åã³ã³ãããŒã«ãŸãã¯åãã©ãŒã ã«ã¯ã¹ããŒã¿ã¹ïŒmySuperForm.statusïŒãããããæå¹ãããç¡å¹ãããç¡å¹ãã®ããããã§ãã éåæããªããŒã¿ãŒã䜿çšããå Žåããã©ãŒã ãçŸåšã©ã®ç¶æ
ã«ããããæ確ã§ãªãå¯èœæ§ãããããããPENDINGãã®ç¹å¥ãªã¹ããŒã¿ã¹ããããŸãã ãã®æ¡ä»¶ïŒmySuperForm.status ===â PENDINGâïŒã®ãããã§ãããªããŒããŒã衚瀺ããããä»ã®ãã©ãŒã ã¹ã¿ã€ãªã³ã°ãå®è¡ãããã§ããŸãã
èªåä¿å
éè¡çšãœãããŠã§ã¢ïŒãœãããŠã§ã¢ïŒã®éçºã«ã¯ãããŸããŸãªæšæºææžã®æäœãå«ãŸããŸãã ããšãã°ããããã¯ã¢ããªã±ãŒã·ã§ã³ãã©ãŒã ãŸãã¯ã¢ã³ã±ãŒãã§ãããå€æ°ã®å¿
é ãã£ãŒã«ãã§æ§æãããå ŽåããããŸãã ãã®ãããªèšå€§ãªããã¥ã¡ã³ãã䜿çšããå ŽåããŠãŒã¶ãŒã®å©äŸ¿æ§ãé«ããããã«èªåä¿åã®ãµããŒããå¿
èŠã§ãããã®ãããã€ã³ã¿ãŒãããæ¥ç¶ããã®ä»ã®æè¡çãªåé¡ããªããªã£ãŠãããŠãŒã¶ãŒã以åã«å
¥åããããŒã¿ã¯ãµãŒããŒã®ãã©ããããŒãžã§ã³ã«æ®ããŸãã
ã¯ã©ã€ã¢ã³ã/ãµãŒããŒã¢ãŒããã¯ãã£ã®èªåä¿åæé ã®äž»ãªåŽé¢ã¯æ¬¡ã®ãšããã§ãã
- ä¿åèŠæ±ã¯ãå€æŽãè¡ãããé åºã§ãµãŒããŒã«ãã£ãŠåŠçãããå¿
èŠããããŸãã åå€æŽã«ããã«ãªã¯ãšã¹ããéä¿¡ããå Žåã以åã®ãªã¯ãšã¹ãã次ã«æ¥ããæ°ããå€æŽãäžæžãããªãããšãä¿èšŒã§ããŸããã
- ãŠãŒã¶ãŒãå
¥åãå®äºãããŸã§ããµãŒããŒã«å€§éã®ãªã¯ãšã¹ããéä¿¡ããå¿
èŠã¯ãããŸãããã¿ã€ãã³ã°ã§ãããè¡ãããšã§ååã§ãã
- æ¯èŒç倧ããªé
延ã§ããã€ãã®å€æŽãè¡ãããæåã®å€æŽã®èŠæ±ããŸã è¿ãããŠããªãå Žåãæåã®èŠæ±ãè¿ãããçŽåŸã«åŸç¶ã®å€æŽããšã«èŠæ±ãéä¿¡ããå¿
èŠã¯ãããŸããã ç¡é¢ä¿ãªããŒã¿ãéä¿¡ããªãããã«ãåŸè
ã®ã¿ã䜿çšã§ããŸãã
æåã®ã±ãŒã¹ã¯ã
concatMapæŒç®åã䜿çšããŠç°¡åã«åŠçã§ããŸãã 2çªç®ã®ã±ãŒã¹ã¯ã
debounceTimeã䜿çšããŠåé¡ãªã解決ãããŸãã 3çªç®ã®ããžãã¯ã¯æ¬¡ã®ããã«èª¬æã§ããŸãã
const lastRequest$ = new BehaviorSubject(null);
ãªã¯ãšã¹ããéä¿¡ããããã«saveQueue $ã«æ®ããŸãã
concatMapã®ä»£ããã«exaustMapæŒç®åãååšããããšã«æ³šæããŠãã ããã ãã®æŒç®åã¯ãå
éšã®ç£èŠããã®ç£èŠãå®äºããïŒãã³ã³ãã€ã«ããããïŒãŸã§ãå€éšã®ç£èŠå¯èœã®ãã¹ãŠã®éç¥ãç¡èŠããããã«å¿
èŠã§ãã ãããããã®å Žåããªã¯ãšã¹ãäžã«æ°ããéç¥ã®ãã¥ãŒãååšããå ŽåãæåŸã®éç¥ãååŸããŠæ®ããç Žæ£ããå¿
èŠããããŸãã exaustMapã¯ãæåŸã®ãã®ãå«ããã¹ãŠãããããããŸãã ãããã£ãŠãæåŸã®éç¥ãBehaviorSubjectã«ä¿åããçŸåšã®å®äºãããªã¯ãšã¹ããæåŸãšç°ãªãå Žåã¯ãµãã¹ã¯ãªãã·ã§ã³ã«ä¿åããŸã-æåŸã®ãªã¯ãšã¹ããåã³ãã¥ãŒã«æå
¥ããŸãã
ãŸãã
catchErrorã¹ããŒãã¡ã³ãã䜿çšããŠå®è£
ãããã¯ãšãªäžã®ãšã©ãŒãç¡èŠããããšã泚ç®ã«å€ããŸãã ä¿åäžã«ãšã©ãŒãçºçããããšããŠãŒã¶ãŒã«éç¥ãããããè€éãªãšã©ãŒåŠçãäœæã§ããŸãã ãããããã®æ¬è³ªã¯ãã¹ããªãŒã ã§ãšã©ãŒãçºçããå Žåããšã©ãŒããã³å®å
šãªéç¥ã®å Žåã®ããã«ãã¹ããªãŒã ãéããŠã¯ãªããªããšããããšã§ãã
ãããã«
RxJSã©ã€ãã©ãªã䜿çšãããªã¢ã¯ãã£ãããã°ã©ãã³ã°ãã¯ãããžã®çŸåšã®éçºã¬ãã«ã§ã¯ããªã¢ãŒããã³ãã³ã°ã·ã¹ãã ã®è² è·ã®é«ãã€ã³ã¿ãŒãã§ã€ã¹ãšã®çžäºäœçšãæŽçããããã®è¿œå ã®äººä»¶è²»ãªãã§ããªã³ã©ã€ã³ãã³ãã³ã°ã·ã¹ãã çšã®æ¬æ Œçãªã¯ã©ã€ã¢ã³ãã¢ããªã±ãŒã·ã§ã³ãäœæã§ããŸãã
RxJSãåããŠç¥ã£ã人ã¯ããã¶ã€ã³ãã¿ãŒã³ãObserverããå®è£
ããã©ã€ãã©ãªã®ãè€éããã«çŽé¢ããŠããçµéšè±å¯ãªéçºè
ã§ãã£ãŠãæããããããšãã§ããŸãã ãããããããããããã®å°é£ãå
æããŠãRxJSã¯å°æ¥ãç°çš®ããŒã¿ã¹ããªãŒã ã®éåæåŠçã®åé¡ããªã¢ã«ã¿ã€ã ã§è§£æ±ºããããã®äžå¯æ¬ ãªããŒã«ã«ãªãã§ãããã