Я пытаюсь создать приложение с 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>
в чем моя проблема?!
Проблема в том, что вы используете 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; // <-----
(...)
}
}