мой shareService в angular 2 отправляет значение, работает правильно, но когда я рендеринг, мои другие компоненты получают значения по умолчанию

0

Я пытаюсь создать приложение с angular 2. вас есть Служба пользователя, и когда пользователь signIn или singOut Im отправляет значение другим компонентам, которые говорят, что пользователь является логином или нет, и его работа правильно, что означает передачу данных. моя проблема заключается в том, что у меня есть частная собственность в других компонентах с именем islogin и со значением по умолчанию (false), что я подписал мой userService islogin... но когда мои компоненты отображают значение по умолчанию снова. как это исправить? это мои коды:

***********************userService*********************************

@Injectable()
export class UserService {

    private static _data: any;

    isLogin$:Subject<boolean> = new Subject();
    UserInfo$:Subject<any> = new Subject();

    // Observable streams
    CheckUser = this.isLogin$.asObservable();
    userinfo = this.UserInfo$.asObservable();

    constructor(private _util: UtilService) {


    }


    public signUp(data: any) {
        return this._util.post('api/auth/register', data);
    }

    public signIn(data: any) {
        var promise = this._util.post('api/auth/login', data);
        promise.then(value => {
            if (value.status == 0) {
                UserService._data = value.result;
                this.isLogin$.next(true);
                this.UserInfo$.next(UserService._data);
            }
        });
        return promise;
    }

    public signOut() {

        var promise = this._util.post('api/auth/logout');
        promise.then(value => {
            if (value.status == 0) {
                this.reset();
                this.isLogin$.next(false);
                this.UserInfo$.next(UserService._data);

            }
        });
        return promise;

    }
}

*********************someComponent like user profle********************

export class Profile extends Ext {

    private isLogin:boolean;
    private model ;


    constructor( 
                private _router: Router,
                private _routeParams: RouteParams, 
                private _seo: SEOService,
                private _user: UserService)
    {
        super();


        this._user.CheckUser.subscribe(val =>{

            this.isLogin = val;
            console.log(this.isLogin);
            alert(val);

        });

        this._user.userinfo.subscribe(val => {

            this.model = val;
            alert(val);

        });
}
}

и это шаблон для этого компонента:

<div *ngIf="isLogin | async" class="container">
   hiiiii {{model.name}}
</div>

в чем моя проблема?!

Теги:
angular
rxjs

1 ответ

0
Лучший ответ

Проблема в том, что вы используете async канал для чего-то, что не является наблюдаемым (т.е. isLogin), а является логическим свойством.

Поэтому либо вы используете это:

<div *ngIf="isLogin" class="container">
  hiiiii {{model.name}}
</div>

Либо вы обновляете свой компонент следующим образом:

export class Profile extends Ext {
  private isLogin:Observable<boolean>; // <-----
  private model ;

  constructor( 
            private _router: Router,
            private _routeParams: RouteParams, 
            private _seo: SEOService,
            private _user: UserService)
  {
    super();

    this.isLogin = this._user.CheckUser; // <-----

    (...)
  }
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню