Мне нужен совет о том, как сделать видимую переменную currentShop
в зависимости от переменной shopList
.Две наблюдаемые переменные, зависящие друг от друга
AppComponent
читает shopList
через shopProvider
. Он работает без проблем, но мне нужно изменить код, чтобы установить currentShop
из загруженных магазинов.
Спасибо.
AppComponent:
export class AppComponent {
currentShop;
shopList;
constructor(router: Router,shopProvider:ShopProvider){
this.shopList = shopProvider.shops;
this.currentShop = shopProvider.currentShop;
shopProvider.loadShops();
shopProvider.setCurrentShop(-1);
router.navigate(['/System']);
}
}
ShopProvider:
export class ShopProvider{
private _http:Http;
shops:Observable<Array<Shop>>;
currentShop:Observable<Shop>;
private obServer:any;
private _shopDataStore : {
shops: Array<Shop>
}
constructor(http:Http){
this._http = http;
this.shops = new Observable(observer => this.obServer = observer).share();
//this.currentShop = ??
this._shopDataStore = {shops: []};
}
setCurrentShop(shopId:number){
//Code ??
}
loadShops(){
this._http
.get('/services/shop/list')
.map(res => res.json())
.subscribe(data => {
this._shopDataStore.shops = data;
this.obServer.next(this._shopDataStore.shops);
})
}
}
HTML:
<div>{{currentShop.name | async}}</div>
<ul>
<li *ngFor="#shop of shopList | async">
<a [routerLink]="['/Shop', {shopId: shop.id}]">
<span>{{shop.name}}</span>
</a>
</li>
</ul>
Благодарим вас за подробные инструкции! Но для меня это не работает. Это приложение не записывает ошибки. shopList все еще работает хорошо, но CurrentShop не появляется :(Если в компоненте будет использоваться js .subscribe (res => {console.log (res)}). Отображает {id: 1, name: 'Test'}. проблема в том, что он работает в компоненте и в шаблоне нет? Здесь полный код: http://pastebin.com/TZ0cwFJF – JaSHin
Я бы также добавил, что мне нужно поместить некоторые журналы в код и отображать только «настройку». – JaSHin
Я тоже столкнулся с этой проблемой.Если вы видите в моем примере, я передаю 'currentShop | async' на отдельный компонент. 'currentShop.name | async' пытается обрабатывать 'name' как наблюдаемое ... Не уверен, как сделать что-то вроде' (currentShop | async) .name'. Вы можете подписаться на «currentShop», наблюдаемый в вашем компоненте, и сохранить экземпляр «Shop' в другой переменной и использовать это ... –