Angular 如果在typescript中调用Array.find()函数,则不调用Subscribe函数
我对Typescript和web开发非常陌生。当我订阅了一个活动却找不到解决方案时,我发现了一件奇怪的事情。 我有一个带有Angular 如果在typescript中调用Array.find()函数,则不调用Subscribe函数,angular,typescript,rxjs,subscription,behaviorsubject,Angular,Typescript,Rxjs,Subscription,Behaviorsubject,我对Typescript和web开发非常陌生。当我订阅了一个活动却找不到解决方案时,我发现了一件奇怪的事情。 我有一个带有BehaviorSubject的服务,其中包含carId。我有一个页面,其中有一个id列表,如果我单击一个id,它将调用setCarId。到目前为止一切正常 这是服务: @Injectable() export class CarService { private carId = new BehaviorSubject(""); setCarId(carId: s
BehaviorSubject
的服务,其中包含carId
。我有一个页面,其中有一个id列表,如果我单击一个id,它将调用setCarId
。到目前为止一切正常
这是服务:
@Injectable()
export class CarService {
private carId = new BehaviorSubject("");
setCarId(carId: string) {
this.carId.next(carId);
}
getCarId(): Observable<string> {
return this.carId.asObservable();
}
我不知道为什么会发生这种情况以及如何解决它,所以请帮助我。订阅工作正常,但您的代码中存在一些问题 首先,汽车列表未定义,因此它无法在您的列表中找到汽车 第二,您尝试对this.subscription调用getCarId方法,但this.description没有该方法,CarService有 如果您像这样在MyService中初始化cars数组,它将正常工作
@Injectable()
export class MyService {
subscription: Subscription;
car: any;
cars: Array<any> = [{carId: "1"}, {carId: "2"}];
constructor(private carService: CarService){
this.carService.getCarId().subscribe(carId=> {
console.log('DO SOMETHING') //
//with this row NOT working, without this row working
this.car = this.cars.find(car => car.carId === carId)
});
}
}
@Injectable()
导出类MyService{
认购:认购;
汽车:任何;
cars:Array=[{carId:1},{carId:2}];
建造商(私人汽车服务:汽车服务){
this.carService.getCarId().subscribe(carId=>{
log('DO SOMETHING')//
//此行不工作时,此行不工作时
this.car=this.cars.find(car=>car.carId===carId)
});
}
}
我找到了解决方案。我不知道原因,但在subscribe方法中,我不能使用任何数组方法,因此例如console.log(this.cars.length)也不起作用,不仅仅是this.cars.find。然而,console.log(this.cars)正确地写出了数组。无论如何,解决方案是我用一个空数组初始化cars数组,就像这里一样
cars:Array<Car>=[];
cars:Array=[];
在这之后,一切正常。如果有人能给我解释一下原因,那就太好了,谢谢你的帮助 this.cars是未定义的?不,它有值,只是我没有将我的所有代码复制到这里检查浏览器中的开发工具,我认为您缺少“;”因此,根据您的tsconfig.json,typesctript不会被编译成正确的JS,或者发出的JS在语法错误后停止解释:
console.log('DO SOMETHING');this.car=this.cars.find(car=>car.carId==carId)代码>我没有解决方案,但我发现了故障原因的另一种可能性,我的车对象有一个用户对象属性,可能它不能像你说的那样传输到JS。不,车有价值,只是我没有复制我所有的代码。我在另一个函数中添加了值。我用console.log(this.cars)检查了它,不管怎样,我检查了您的基本解决方案,您是对的,订阅工作正常。所以我继续,我认为问题的原因可能是我的车对象有一个其他的用户对象作为它的属性。
cars:Array<Car>=[];