Как я могу передать два потока данных / наблюдаемых в одном канале?

Как я могу передать два потока данных / наблюдаемых в одном канале?

У меня есть две формы в одном представлении, каждый вывод меняется. У меня есть глобальная директива с двумя селекторами для получения обоих потоков.

Я легко могу обработать одну форму, но когда у меня есть две, и помещаю каждую в свою собственную трубу или директиву, они, так сказать, портят функцию сохранения друг друга, поэтому мне нужно обе в одной трубе. (Или другое решение;)

Компонент формы

 {amp}lt;form name="shop_info" autocomplete="off" #f1="ngForm" (SubmitShop)="save($event)" [SaveShop]="f1" *ngIf="merchant"{amp}gt; ... {amp}lt;/form{amp}gt; ... {amp}lt;form name="region" autocomplete="off" #f2="ngForm" (SubmitRegion)="save($event)" [SaveRegion]="f2"{amp}gt; ... {amp}lt;/form{amp}gt; 

Директива с одним потоком:

 @Directive({ selector: '[SaveShop], [SaveRegion]' }) export class SaveMerchantDirective implements OnInit { @Input() SaveShop: any; @Input() SaveRegion: any; @Output() SubmitShop: EventEmitter{amp}lt;any{amp}gt; = new EventEmitter{amp}lt;any{amp}gt;(); @Output() SubmitRegion: EventEmitter{amp}lt;any{amp}gt; = new EventEmitter{amp}lt;any{amp}gt;(); @Input() debounce = 350; constructor( private saveService: SaveService, private $transitions: TransitionService ) { } ngOnInit() { this.saveRegion.form.valueChanges .pipe( debounceTime(this.debounce), switchMap((data: Object) ={amp}gt; { if (!sessionStorage.getItem('dataRegion') || sessionStorage.getItem('dataRegion') === '{}') { sessionStorage.setItem('dataRegion', JSON.stringify(data)); } this.$transitions.onBefore({}, () ={amp}gt; { if (this.saveRegion.valid {amp}amp;{amp}amp; !this.saveRegion.pristine) { if (confirm(this.translate.instant( 'You are about to discard your REGION changes. Click "OK" to discard and navigate away! Click "Cancel" to stay.' ))) { this.discard(); return true; } else { return false; } } }); if (this.saveRegion.valid {amp}amp;{amp}amp; !this.saveRegion.pristine) { window.dispatchEvent(new CustomEvent('showHeader', { detail: true })); return this.saveService.currentStatus$.pipe( map(status ={amp}gt; { if (status === 'save') { this.save(data); } else if (status === 'discard') { this.discard(); } }) ); } else { return NEVER; } }) ) .subscribe(); this.$transitions.onExit({}, () ={amp}gt; { sessionStorage.removeItem('dataRegion'); status = 'false'; this.saveService.changeStatus('false'); }); 

Как мне справиться с этим?

Могу ли я просто сделать:

 combineLatest(this.saveRegion.form.valueChanges, this.saveShop.form.valueChanges) .pipe( debounceTime(this.debounce), switchMap((data: Array{amp}lt;Object{amp}gt;) ={amp}gt; {... 

Редактировать:

дела

 Observable.combineLatest( this.saveShop.form.valueChanges, this.saveRegion.form.valueChanges ) .subscribe(... 

дает Property 'combineLatest' does not exist on type 'typeof Observable'.

дела

 combineLatest( this.saveShop.form.valueChanges, this.saveRegion.form.valueChanges ) .subscribe(... 

дает мне несколько проблем, когда одна из них заключается в том, что «форма» не может читать неопределенное (так как два потока не приходят одновременно, один неопределенный). И если я добавлю startWith(null) я получу this.saveShop.form.valueChanges.startWith is not a function

Понравилась статья? Поделиться с друзьями:
JavaScript & TypeScript
Adblock
detector