Angular 使用可观察对象时,变量返回时未定义

Angular 使用可观察对象时,变量返回时未定义,angular,typescript,observable,Angular,Typescript,Observable,有人能告诉我为什么未定义this.userDataObserver的变量会导致.next()函数失败吗?在这里撞我的头 我需要将一些数据推送到可以从其他组件访问的服务变量中(尽量避免使用本地存储) 有人能帮我理解为什么这个变量在类中被明确设置时是未定义的吗 import { Injectable } from '@angular/core'; import { Http, Response } from '@angular/http'; import { Observable } from 'r

有人能告诉我为什么未定义this.userDataObserver的变量会导致.next()函数失败吗?在这里撞我的头

我需要将一些数据推送到可以从其他组件访问的服务变量中(尽量避免使用本地存储)

有人能帮我理解为什么这个变量在类中被明确设置时是未定义的吗

import { Injectable } from '@angular/core';
import { Http, Response } from '@angular/http';
import { Observable } from 'rxjs/Observable';
import { Observer } from 'rxjs/Observer';
import 'rxjs/add/operator/map';


@Injectable()
export class globalService {
//Sets logon token
userData:any;
userDataRetrieval: Observable<any>;
userDataObserver: any;
//Sets + updates user info
userInfo: any;
userInfoRetrieval: Observable<any>;
userInfoObserver: any;

constructor() {
    this.userDataRetrieval = new Observable(observer => {
        this.userDataObserver = observer;
    })
    this.userInfoRetrieval = new Observable(observer => {
        this.userInfoObserver = observer;
    })

}
setUser(userData: any) {
    this.userData = userData;
    this.userDataObserver.next(this.userData); this.userDataObserver comes back undefined when calling this function from my component.
}

saveUserInfo(userInfo: any) {
    this.userInfo = userInfo;
    this.userInfoObserver.next(this.userInfo);
}
从'@angular/core'导入{Injectable};
从'@angular/Http'导入{Http,Response};
从“rxjs/Observable”导入{Observable};
从'rxjs/Observer'导入{Observer};
导入'rxjs/add/operator/map';
@可注射()
导出类globalService{
//设置登录令牌
用户数据:任何;
userDataRetrieval:可观察的;
userDataObserver:任何;
//设置并更新用户信息
用户信息:任何;
UserInformetrieval:可观察的;
userInfoObserver:any;
构造函数(){
this.userDataRetrieval=新的可观察对象(observer=>{
this.userDataObserver=observer;
})
this.userinfortrieval=新的可观察对象(observer=>{
this.userInfoObserver=observer;
})
}
setUser(userData:any){
this.userData=userData;
this.userDataObserver.next(this.userData);this.userDataObserver在从我的组件调用此函数时返回未定义。
}
saveUserInfo(userInfo:any){
this.userInfo=userInfo;
this.userInfoObserver.next(this.userInfo);
}

}

相反,直接调用
this.userDataObserver.next(this.userData)
您应该使用以下命令,并尝试一下是否适合您:

setUser(userData: any) {
    this.userData = userData;
    this.userDataObserver = new Observable(observable => {
        observable.next()
    });
}

如果这对您不起作用,请告诉我…

回答您的具体问题:如果您查看,您将看到以下内容:

  /**
   * @constructor
   * @param {Function} subscribe the function that is  called when the Observable is
   * initially subscribed to. This function is given a Subscriber, to which new values
   * can be `next`ed, or an `error` method can be called to raise an error, or
   * `complete` can be called to notify of a successful completion.
   */
  constructor(subscribe?: (this: Observable<T>, subscriber: Subscriber<T>) => TeardownLogic) {
    if (subscribe) {
      this._subscribe = subscribe;
    }
  }
/**
*@constructor
*@param{Function}订阅当可观察对象为
*最初签署的。此函数被赋予一个订阅者,其中包含新值
*可以是“next”,或者可以调用“error”方法来引发错误,或者
*可以调用'complete'来通知成功完成。
*/
构造函数(subscribe?:(this:Observable,subscriber:subscriber)=>TeardownLogic){
如果(订阅){
这个._subscribe=subscribe;
}
}
这段代码显示了一个Observable的构造函数的参数是一个回调,在订阅Observable时调用该回调。由于您从未在代码中调用过
subscribe
,因此您为创建可观察对象而传递的回调从未被调用


现在,从你给出的代码示例中,很难理解你想要实现什么。也许您可以提供一些额外的上下文/解释,以便获得实现最终目标的指导。

您需要在模块和组件提供商处声明您的globalService