Для потомков, в конечном счете, все сводилось к времени при использовании наблюдаемого.Моя первоначальная проблема заключалась в том, что я отправил клиенту новый список с картой, какой элемент должен быть выбран.Это приводит к повторной привязке nb-stepper, и установка selectedActivityIndex произошла слишком рано.Вместо этого я инициализирую компонент один раз, а затем после привязки продолжаю устанавливать индекс.
private getActivities() {
if (this.selectedFailoverGroup && this.selectedTargetRegion) {
this.activitiesService.getActivities(this.selectedFailoverGroup)
.subscribe((d1, t1 = this) => {
if(d1['statusCode'] == 200) {
console.log('FailoverComponent.getActivities - data: %s', JSON.stringify(d1));
t1.activities = d1['activities'];
t1.activitiesService.getCompletedActivities(t1.selectedFailoverGroup)
.subscribe((d2) => {
console.log('FailoverComponent.getCompletedActivities - data: %s', JSON.stringify(d2));
for (let a of t1.activities) {
a.completed = (d2['activities'].map(b => { return b.name == a.name }).indexOf(true, 0) > -1 );
}
});
}
else {
t1.activities = [];
}
}, (error) => {
console.error(error)
}, () => {
this.activitiesService.getCurrentActivity(this.selectedFailoverGroup)
.subscribe((d1, t1 = this) => {
if(d1['statusCode'] == 200) {
console.log('FailoverComponent.getCurrentActivity - data: %s', JSON.stringify(d1));
t1.selectedActivityIndex = t1.activities.map(a => { return a.name == d1['name']}).indexOf(true, 0);
}
else {
t1.activities = [];
}
})
});
} else {
this.activities = [];
}
}
this._hubConnection.on("notifyErrorActivity", (errorActivity: string, t1 = this) => {
console.log('FailoverComponent.completedActivities - message: %s', JSON.stringify(errorActivity))
if (errorActivity != null) {
t1.selectedAcitivtyStyle = { 'background-color': '#FF4C6A' }
}
});
<nb-stepper
orientation="vertical"
disableStepNavigation="true"
[(selectedIndex)]="selectedActivityIndex"
style="min-height: 800px;"
>
<nb-step *ngFor="let activity of activities"
[completed]="activity.completed"
[label]="activity.name"
>
</nb-step>
</nb-stepper>