У меня возникли проблемы с вложенными Наблюдаемыми вызовами. Под этим я подразумеваю вызов службы http, которая извлекает пользователя, затем получает идентификатор от пользователя, чтобы сделать еще один http-вызов, и, наконец, отобразить результаты на экране.Как сделать вложенные Наблюдаемые вызовы в Angular2
1) HTTP GET 1: получить Пользователь
2) HTTP GET 2: получить предпочтения пользователя, проходящие уникальный идентификатор в качестве параметра
Это переводится в следующий код в компоненте Blah.ts
:
версия 1 - этот код не отображается ничего
ngOnInit() {
this.userService.getUser()
.flatMap(u => {
this.user = u; // save the user
return Observable.of(u); // pass on the Observable
})
.flatMap(u => this.userService.getPreferences(this.user.username)) // get the preferences for this user
.map(p => {
this.preferences = p; // save the preferences
});
}
версия 2 - этот код работает, но кажется, неправильный подход ко мне:
this.userService.getUser().subscribe(u => {
this.user = u;
this.userService.getPreferences(this.user.username).subscribe(prefs => {
this.preferences = prefs;
});
});
И это шаблон:
<h3>User</h3>
<div class="row col-md-12">
<div class="col-md-6">
<div class="panel panel-default">
<div class="panel-heading">
<h3 class="panel-title">User details</h3>
</div>
<div class="panel-body">
<table class="table table-condensed">
<thead>
<tr>
<th>Username</th>
<th>Full Name</th>
<th>Enabled</th>
</tr>
</thead>
<tbody>
<tr>
<td>{{user?.username}}</td>
<td>{{user?.fullName}}</td>
<td>{{user?.enabled}}</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<!-- end of col 1-->
<div class="col-md-6">
<div class="panel panel-default">
<div class="panel-heading">
<h3 class="panel-title">User preferences</h3>
</div>
<div class="panel-body">
<table class="table table-condensed">
<thead>
<tr>
<th>Language</th>
<th>Locale</th>
</tr>
</thead>
<tbody>
<tr>
<td>{{preferences?.preferences?.get('language')}}</td>
<td>{{preferences?.preferences?.get('locale')}}</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<!-- end of col 2-->
</div>
<!-- end of row 1-->
Я не думаю, что любая точка, показывающая услуги , который просто делает http get()
звонков как:
http.get('http://blablah/users/')
.map((response) => response.json())
Пожалуйста, предложите что является лучшим рабочим подходом для определения цепочки наблюдаемых.
«этот код работает, но кажется, неправильный подход ко мне ...» Почему? –