2016-10-12 1 views
2

Я использую государственную службу приложения на основе BehaviorSubject s в Rx, которая предоставляет Observables для компонентов, с которыми необходимо работать. В одном из моих компонентов я хочу показать некоторые вложенные данные, если он присутствует.Отображение вложенных данных из наблюдаемого в режиме Angular 2

Это то, что я пытался

<div>>{{ sharedState.loadedAccountDetails.accountId | async }}</div> 

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

В моем общем состоянии компонента есть только Observable Я не думаю, что есть что показать.

В конечном счете, я хочу показать эти данные, когда его настоящее и ничего не отображает, когда его нет. Как я могу это достичь?

ответ

3

Вам необходимо использовать трубу async непосредственно на наблюдаемом, а не значениях, излучаемых Observable. В шаблоне используйте вместо этого:

<div>{{ (sharedState | async)?.loadedAccountDetails.accountId }}</div> 

С следующего компонента:

import { Component } from '@angular/core'; 
import { Observable, Subject } from 'rxjs'; 

@Component({ 
    selector: 'my-app', 
    template: ` 
    I'm Loaded! 
    <div>{{ (sharedState | async)?.loadedAccountDetails.accountId }}</div> 
    ` 
}) 
export class AppComponent { 

    sharedState: Observable = null; 
    private subject = new Subject(); 

    constructor() { 
    this.sharedState = this.subject.asObservable(); 
    setTimeout(_ => { 
     this.subject.next({ 
     loadedAccountDetails: { 
      accountId: 42 
     } 
     }); 
    }, 1000); 
    } 

} 

Этот пример показывает номер 42 один второй после того, как компонент был создан.

Смотреть демо: http://plnkr.co/edit/fGtNVOZWndYU22U4sRow

+0

я должен использовать '' на loadedAccountDetails, а также, чтобы избежать еще одной ошибки, но это работает спасибо. – Barry

+0

Я думаю, мой вопрос, кажется, немного уродливым - есть ли лучший способ сделать это? – Barry

+0

@Barry Я так не думаю, если вы хотите использовать «async» и сохранить все в шаблоне. – martin

 Смежные вопросы

  • Нет связанных вопросов^_^