有人能告诉我为什么变量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);
}
}
答案 0 :(得分:0)
而是直接致电this.userDataObserver.next(this.userData)
,您应该使用以下内容并尝试这是否适合您:
setUser(userData: any) {
this.userData = userData;
this.userDataObserver = new Observable(observable => {
observable.next()
});
}
如果这对您不起作用,请告诉我......
答案 1 :(得分:0)
回答您的具体问题:如果您查看the source of Observable,您会看到以下内容:
/**
* @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;
}
}
该代码显示Observable构造函数的参数是您订阅Observable时调用的回调。由于您从未在代码中调用subscribe
,因此您传递给创建Observable的回调永远不会被调用。
现在,从您提供的代码示例中,很难理解您尝试实现的目标。也许您可以提供一些额外的背景/解释,以便您可以获得指导,以实现您的最终目标,无论它是什么。