提取订阅的值

时间:2019-06-03 17:41:54

标签: angular

在我的方法中,我需要返回“ this.profile”。但是我无法在profileObservable

之外使用this.profile
  profileObservable: Observable<ProfileModel>;
  profile: ProfileModel;

  resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<ProfileModel> {
      this.store$.dispatch(new ProfileFeatureStoreActions.GetProfile());

      this.profileObservable = this.store$.pipe(
        select(
          ProfileFeatureStoreSelectors.selectProfile
        ),
        filter(profile => !!profile)
      );

      this.profileObservable.subscribe(profile => {
        this.profile = profile;
        console.log(this.profile) // here is defined

      });

      return this.profile; //it's undefined

  }

如果您有解决方案,那就非常感谢

3 个答案:

答案 0 :(得分:0)

您无法返回订阅。您的决心返回Observable,因此您必须返回Observable值。

例如:

_log(someObject) //should log the object same as console.log does
_log('app running on port %d',3000) //should printf like console.log does

答案 1 :(得分:0)

您必须返回return this.profileObservable;,然后才能订阅它。 另一件事是为什么您需要此return this.profile; //it's undefined,因为它是全局变量,所以可以在组件中的任何位置访问this.profile。

答案 2 :(得分:0)

在类中创建一个像这样的方法:

get myProfile() {
     return this.profile;
  }

现在可以通过调用方法“ myProfile()”来访问您的个人资料值。

另一种选择是利用您可以订阅的角度行为主题,以获取最后发出的值,例如:

步骤1.在班级属性之后注册行为主题,如下所示:

profileSubject: BehaviorSubject<ProfileModel> = new BehaviorSubject();
profile$: Observable< ProfileModel > = this.profileSubject.asObservable();

步骤2。使用注册的主题发出您的个人资料值:

this.profileObservable.subscribe(profile => {
   this.profileSubject.next(profile)
});

要在订阅之外访问您的个人资料值,请执行以下操作

  this.profile$.subscribe(res => {
    // the res contains your body;
   });