如何在属性更改发送值时以角度2创建ShareService,例如以角度1观察

时间:2016-05-17 13:29:29

标签: javascript angularjs angular

我有UserService并且在此服务中拥有isloggin属性。这是我的服务:

@Injectable()
export class UserService {

    private static _data: any;
    isloggin ;



    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;
            }
        });
        return promise;
    }

    public signOut() {

        var promise = this._util.post('api/auth/logout');
        promise.then(value => {
            if (value.status == 0) {
                this.reset();
            }
        });
        return promise;


    }

}

想要当isloggin更改为true或false时将此值发送给其他组件...如何在此服务中使用rxjs?

1 个答案:

答案 0 :(得分:0)

您可以为此利用Observable / Subject。像这样:

@Injectable()
export class UserService {

    private static _data: any;
    islogin:boolean;
    isLogin$:Subject<boolean> = new Subject();

    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.login$.next(true); // <------------
            }
        });
        return promise;
    }

    public signOut() {
       var promise = this._util.post('api/auth/logout');
       promise.then(value => {
          if (value.status == 0) {
              this.reset();
            this.login$.next(false); // <-----------
          }
        });
        return promise;
    }
}

您需要为需要一起通信的所有组件提供此服务的单个实例。您可以在引导应用程序时指定其提供程序:

bootstrap(AppComponent, [ (...), UserService ]);

有关详细信息,请参阅此页: