2016-12-19 2 views
1

Мне нужно отредактировать некоторое свойство компонентов после входа в систему. например, мне нужно изменить свойство сообщения HomeComponent и возрастное свойство UserComponent, поэтому наследование класса компонента не является вариантом. Как я могу добиться этогоКак получить доступ к свойствам компонента без наследования

auth.service

// app/auth.service.ts 

import { Injectable }  from '@angular/core'; 
import { tokenNotExpired } from 'angular2-jwt'; 

declare var Auth0Lock: any; 

@Injectable() 
export class Auth { 
    lock = new Auth0Lock('asdsd', 'mehmetyeneryilmaz.eu.auth0.com', {}); 

    constructor() { 
    this.lock.on("authenticated", (authResult) => { 
     localStorage.setItem('id_token', authResult.idToken); 
    }); 
    } 

    public login() { 
    this.lock.show(); 
    } 

    public authenticated() { 
    return tokenNotExpired(); 
    } 

    public logout() { 
    localStorage.removeItem('id_token'); 
    } 
} 
+0

Я не совсем понимаю вашу проблему. Где «HomeComponent» и «UserComponent». Если вы сомневаетесь в том, что является лучшим решением в этом случае, используйте службу. См. Также https://angular.io/docs/ts/latest/cookbook/component-communication.html – yurzui

ответ

3

Используйте общую службу с наблюдаемыми и подписываться на изменения:

import { Injectable }  from '@angular/core'; 
import { tokenNotExpired } from 'angular2-jwt'; 

declare var Auth0Lock: any; 

@Injectable() 
export class Auth { 
    lock = new Auth0Lock('asdsd', 'mehmetyeneryilmaz.eu.auth0.com', {}); 

    private message = new BehaviorSubject<string>(null); 
    public $message = this.message.asObservable(); 

    constructor() { 
    this.lock.on("authenticated", (authResult) => { 
     localStorage.setItem('id_token', authResult.idToken); 
    }); 
    } 

    public login() { 
    this.lock.show(); 
    this.message.next('checking authentication'); 
    } 

    public authenticated() { 
    return tokenNotExpired(); 
    } 

    public logout() { 
    localStorage.removeItem('id_token'); 
    this.message.next('successfully logged in'); 
    } 
} 
+0

Я добавил «import {BehaviorSubject, Observable} из« rxjs/Rx »;» line наверху [ts] Свойство 'toObservable' не существует в типе 'BehaviorSubject '. У вас есть идея, как это решить? – TyForHelpDude

+1

К сожалению, должен был быть 'asObservable()' См. Также https://angular.io/docs/ts/latest/cookbook/component-communication.html#!#bidirectional-service –

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