モーダルウィンドウ内にあるいくつかのコンポーネント間の通信に共有サービスを使用していますが、モーダルウィンドウ内のモーダル内に設定されている値を取得しようとしています。それが存在するコンポーネントです。角2 RxJS Observable Skipping最初の呼び出しを購読する
私のサービスでgetSelectedSourceField関数を購読すると、ユーザーがモーダルでソースを最初に選択したときに購読をスキップしますが、それ以降は期待どおりに機能します(つまり、選択したフィールドを成功折り返し電話)。
どのような考えですか?
マイサービス:
import { Component, ViewChild, OnInit } from '@angular/core';
import { DataService } from '../../services/dataService';
import { Response, Headers } from '@angular/http';
import { Condition } from '../transformation';
import { NgbModal, ModalDismissReasons } from '@ng-bootstrap/ng-bootstrap';
import { SourceFieldListComponent } from '../../source/selection/sourcefield-list.component';
import { SourceListComponent } from '../../source/selection/source-list.component';
import { SFieldSelectService } from '../../services/source-select.service';
@Component({
selector: 'condition-addedit',
templateUrl: 'app/transformation/condition/condition-addedit.component.html',
providers: [DataService, SFieldSelectService]
})
export class ConditionAddEditComponent implements OnInit {
active: boolean = true;
condSeqCount = 1;
selectingCondition: Condition;
hasSelectedSourceField: boolean = false;
//List of Conditions currently in the add/edit list
public conditions: Condition[] = [];
//Modal Functions
closeResult: string;
openSourceSelect(content, condition) {
this.selectingCondition = condition;
this.modalService.open(content, { size: 'lg' }).result.then((result) => {
//User selected source field in modal
if (result == 'Select SField') {
this.selectService.getSelectedSourceField()
.subscribe(sourceField => { <--- SKIPS THIS THE FIRST TIME BUT NOT AFTER
alert(sourceField.name);
this.selectingCondition.sourceField = sourceField
}
, (error) => alert(error));
}
}, (reason) => {
this.closeResult = `Dismissed ${this.getDismissReason(reason)}`;
});
}
private getDismissReason(reason: any): string {
if (reason === ModalDismissReasons.ESC) {
return 'by pressing ESC';
} else if (reason === ModalDismissReasons.BACKDROP_CLICK) {
return 'by clicking on a backdrop';
} else {
return `with: ${reason}`;
}
}
//Add a new condition to the list of conditions
addCondition() {
this.conditions.push(new Condition(this.condSeqCount++, (this.condSeqCount == 1) ? '' : 'or', '', '', '', '', null));
}
constructor(private _dataService: DataService, private modalService: NgbModal, private selectService: SFieldSelectService) {}
ngOnInit(): void {
this.selectService.hasSelectedSourceField().subscribe(hasSelectedSourceField => this.hasSelectedSourceField = hasSelectedSourceField);
}
}
これは、ngOnInitを購読して変数に代入し、その変数に "selectingCondition"を設定するだけで回避できました。しかし、私の質問の例では何が起きているのか不思議です。 – Deej