我提供了带有变量的服务以及将数据带到该变量的方法
export class UserService {
userDetails;
getUserProfile(){
return this.http.get(this.BaseURI+'/UserProfile').subscribe(
res=>{
this.userDetails=res;
// console.log(res);
},
err=>{
console.log(err);
}
);
}
现在我想从组件中检查变量何时更改并读取它。我该怎么办?
更新。
export class UserService {
userDetails;
getUserProfile(){
this.http.get(this.BaseURI+'/UserProfile').subscribe(
res=>{
this.userDetails=res;
},
err=>{
console.log(err);
}
)
}
在组件中我有这个:
ngOnInit() {
this.service.userDetails.subscribe((userDetails) =>this.userDetails=userDetails)
}
现在,当我运行应用程序时,出现以下错误:
AppComponent.html:2错误TypeError:无法读取属性“订阅” 的未定义
答案 0 :(得分:1)
我相信您的get请求完成时,您基本上需要组件中的数据。
解决方案1:考虑将userDetails
设为可观察的。这样,您可以在其中的值更改时收听它
export class UserService {
private _userDetails: Subject<any> = new Subject<any>(); // consider putting the actual type of the data you will receive
public userDetailsObs = this._userDetails.asObservable();
getUserProfile(){
return this.http.get(this.BaseURI+'/UserProfile').subscribe(
res=>{
this._userDetails.next(res)
// console.log(res);
},
err=>{
console.log(err);
}
);
}
}
在组件内部
constructor(private _userService: UserService) {}
ngOnInit() {
this._userService.userDetailsObs.subscribe((userDetails) => {
console.log(userDetails)
})
}
解决方案2.考虑仅返回HTTP可观察到的自身。
getUserProfile(){
return this.http.get(this.BaseURI+'/UserProfile');
}
在组件内部
constructor(private _userService: UserService) {}
ngOnInit() {
this._userService.getUserProfile.subscribe((userDetails) => {
console.log(userDetails)
})
}
答案 1 :(得分:0)
让您的服务具有以下功能:
export class UserService {
getUserProfile(){
return this.http.get(this.BaseURI+'/UserProfile');
);
}
然后在您的组件中订阅它。
import { Component, OnInit } from '@angular/core';
import {ServiceName} from '../servicename.service';
export class ViewComponent implements OnInit {
constructor(private serviceName:ServiceName) { }
public userDetails={};
ngOnInit() {
this.serviceName.getUserProfile().subscribe(res=>this.userDetails=res);
}
}