2016-07-18 2 views
0

У меня есть мой AccountService определяется следующим образом:Наблюдаемые не тянущие данные с AsyncPipe

export class AccountService { 
    user: Observable<PlatformUser>; 
    isAdmin: boolean; 

    constructor(private http: Http) { 
     this.getUser(); 
    } 

    private getUser() { 
     if (this.user) { return this.user; } 
     else { 
      this.user = this.http.get("account/userinfo") 
       .map(result => { 
        let user: PlatformUser = result.json(); 
        user.isAdmin = user.roles.indexOf("InformationTechnology") != -1; 
        this.isAdmin = user.isAdmin; 
        return user; 
       }); 
     } 
    } 

И я ссылаться на него от одного из моих компонентов.

export class HomeComponent implements OnInit { 
    user: Observable<PlatformUser>; 

    constructor(private accountService: AccountService) { 
    } 

    ngOnInit() { 
     this.user = this.accountService.user; 
    } 
} 

Внутри моего взгляда, точно так же, как тест ... я не могу вытащить данные, которых я ожидаю. Если я подписываюсь на событие и присваиваю результат переменной, все работает нормально, но я хочу использовать AsyncPipe, чтобы избежать необходимости вручную устанавливать это.

{{user | json}} 
{{user?.firstName | async}} 

Первая для моих целей отладки ... это показывает мне, что я не отходил все данные, которые я должен быть. Все это показывает следующее:

{ "_isScalar": false, "source": { "_isScalar": false }, "operator": {} } 

Второй ничего не показывает. Мне не хватает ключевого знания, которое удерживает меня и ищет просветления.

ответ

3

если user получает назад к вам как наблюдаемым, и вы можете подписаться на него, вы можете попробовать что-то вроде этого {{ (user | async)?.firstName }}

сначала вам нужно пройти user наблюдаемым через async трубы. Когда есть данные, вы можете вызвать user.firstName, как и обычную переменную.

+0

Это работает! Можете ли вы немного рассказать о том, почему это необходимо, в вашем ответе? – twilliams

+1

Большое вам спасибо. Отлично. Я даже не думал об этом, потому что использовал Observables с асинхронным каналом, прежде чем это не нужно было делать. Я думаю, потому что они уже были заполнены данными. – twilliams

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