Angular 将模型值发送给observer.next();
我有一个如下的函数。我正在试图弄清楚如何将userDetails发送给observer.next()Angular 将模型值发送给observer.next();,angular,Angular,我有一个如下的函数。我正在试图弄清楚如何将userDetails发送给observer.next() getUserDetails(userId:string):可观察{ 常量url=`this.candidateUrl}/Get`; 这个.u http.get(url+'/'+userId).subscribe((resp)=>{ const userDetails:GetUserByIdModel={ 名字:“乔伊斯”, 联系渠道:[ {类型:1,值:'test@gmail.com' },
getUserDetails(userId:string):可观察{
常量url=`this.candidateUrl}/Get`;
这个.u http.get(url+'/'+userId).subscribe((resp)=>{
const userDetails:GetUserByIdModel={
名字:“乔伊斯”,
联系渠道:[
{类型:1,值:'test@gmail.com' },
{类型:2,值:'01111111'}
],
};
})
返回新的可观察对象((观察者)=>{
下一步(用户详细信息);
observer.complete();
});
}
当前,即使我将const userDetails:GetUserByIdModel更改为let/var userDetails:GetUserByIdModel,我也会得到“找不到名称‘userDetails’”,您在这里尝试的是转换从API调用获得的响应。这是使用Rxjs
map
操作符的最佳情况。以下是方法:
import { map } from 'rxjs/operators';
...
getUserDetails(userId: string): Observable < GetUserByIdModel > {
const url = `${this.candidateUrl}/Get`;
return this._http.get < any > (url + '/' + userId).pipe(
map(resp => {
const userDetails: GetUserByIdModel = {
firstname: 'Joyce',
contactChannels: [{
type: 1,
value: 'test@gmail.com'
},
{
type: 2,
value: '0111111111'
}
],
};
return userDetails;
})
);
}
从'rxjs/operators'导入{map};
...
getUserDetails(userId:string):可观察{
常量url=`this.candidateUrl}/Get`;
返回此文件。_http.get(url+'/'+userId)。管道(
映射(resp=>{
const userDetails:GetUserByIdModel={
名字:“乔伊斯”,
联系渠道:[{
类型:1,
值:'test@gmail.com'
},
{
类型:2,
值:“01111111”
}
],
};
返回用户详细信息;
})
);
}
首先,当收到订户的响应时,您想返回用户吗?如果答案是“是”,您可以在订阅
中添加returning,或者您希望返回一个新的可观察对象,因为您有人订阅了此可观察对象,您应该执行以下操作:
observer: Subject<any> = new BehaviorSubject<any>;
getUserDetails(userId: string): Observable<GetUserByIdModel> {
const url = `${this.candidateUrl}/Get`;
this._http.get<any>(url + '/' + userId).subscribe((resp) => {
// Now you emitting new data as soon as possible you get data
this.observer.next(resp);
})
}
下次请说得更清楚些,如果你有任何问题,请随时提问。如果你觉得我上面写的有用,你可以投票支持我的答案。通常,您使用主题在多个组件中共享数据,您应该将此逻辑放在服务中
userDetails: GetUserByIdModel = {};
getUserDetails(userId: string): Observable<GetUserByIdModel> {
const url = `${this.candidateUrl}/Get`;
this._http.get<any>(url + '/' + userId).subscribe((resp) => {
this.userDetails = {
firstname: 'Joyce',
contactChannels: [
{ type: 1, value: 'test@gmail.com' },
{ type: 2, value: '0111111111' }
],
};
})
return new Observable((observer) => {
observer.next(this.userDetails);
observer.complete();
});
}
observer: Subject<any> = new BehaviorSubject<any>;
getUserDetails(userId: string): Observable<GetUserByIdModel> {
const url = `${this.candidateUrl}/Get`;
this._http.get<any>(url + '/' + userId).subscribe((resp) => {
// Now you emitting new data as soon as possible you get data
this.observer.next(resp);
})
}
observer.subscriber(data => {
// and here you'll have data from that observer
console.log(data)
})