Angular 5 尝试订阅时无法读取未定义的 属性 'subscribe',这不是一种服务方法
Angular 5 Cannot read property 'subscribe' of undefined when am trying to subscribe which is not a type of Service Method
我有一个方法,
validatingUpdateBtn: boolean;
Validating(): Observable<boolean> {
//Do some function
if (this.validatingUpdateBtn) {
return Observable.of(true).map(res => res);
}
else {
return Observable.of(false).map(res => res);
}
}
现在如下方法所示,我订阅了上面的方法。
handleSelection(){
this.Validating().subscribe(
(res) => {
if (res) {
//Do some work
}else{
//Do some work
}
}
)
}
但是我在尝试订阅 Validating() 时收到 Cannot read 属性 'subscribe' of undefined方法。
我没弄错是怎么回事?
validatingUpdateBtn:布尔值;
ValidatingFunction = () => {
//Do some function
if (this.validatingUpdateBtn) {
return Observable.of(true).map(res => res);
}
else {
return Observable.of(false).map(res => res);
}
}
Validating = ValidatingFunction.asObservable();
试试这个也许有用
你没有什么可以 map
因此删除 of
之后的 map
运算符。使用 rxjs/observable/of
中的 of
运算符,如下所示。
import { Observable, of } from 'rxjs';
Validating(): Observable<any> {
let res = this.validatingUpdateBtn ? of(true) : of(false);
return res;
}
handleSelection(): void{
this.Validating().subscribe( res => {
if (res) {
console.log(res);
} else {
console.log(res);
}
});
}
正如我们通过 @Chandan Y S 发现的那样,问题在于当前的 if
语句在另一个条件结构中,在本例中为 switch
语句,在某些特定场景中,执行甚至没有到达 returning observables 的 if-else
语句,这就是为什么函数没有 return 任何东西的原因。
我有一个方法,
validatingUpdateBtn: boolean;
Validating(): Observable<boolean> {
//Do some function
if (this.validatingUpdateBtn) {
return Observable.of(true).map(res => res);
}
else {
return Observable.of(false).map(res => res);
}
}
现在如下方法所示,我订阅了上面的方法。
handleSelection(){
this.Validating().subscribe(
(res) => {
if (res) {
//Do some work
}else{
//Do some work
}
}
)
}
但是我在尝试订阅 Validating() 时收到 Cannot read 属性 'subscribe' of undefined方法。
我没弄错是怎么回事?
validatingUpdateBtn:布尔值;
ValidatingFunction = () => {
//Do some function
if (this.validatingUpdateBtn) {
return Observable.of(true).map(res => res);
}
else {
return Observable.of(false).map(res => res);
}
}
Validating = ValidatingFunction.asObservable();
试试这个也许有用
你没有什么可以 map
因此删除 of
之后的 map
运算符。使用 rxjs/observable/of
中的 of
运算符,如下所示。
import { Observable, of } from 'rxjs';
Validating(): Observable<any> {
let res = this.validatingUpdateBtn ? of(true) : of(false);
return res;
}
handleSelection(): void{
this.Validating().subscribe( res => {
if (res) {
console.log(res);
} else {
console.log(res);
}
});
}
正如我们通过 @Chandan Y S 发现的那样,问题在于当前的 if
语句在另一个条件结构中,在本例中为 switch
语句,在某些特定场景中,执行甚至没有到达 returning observables 的 if-else
语句,这就是为什么函数没有 return 任何东西的原因。