Javascript 为什么箭头函数不传递参数?
我使用angular w/rxjs来观察界面上的用户事件。但是,我在向arrow函数中的方法传递参数时遇到了一个非常简单的问题。问题是: 这不起作用:未将searchterm传递给此。searchFacilitiesJavascript 为什么箭头函数不传递参数?,javascript,ecmascript-6,rxjs,arrow-functions,Javascript,Ecmascript 6,Rxjs,Arrow Functions,我使用angular w/rxjs来观察界面上的用户事件。但是,我在向arrow函数中的方法传递参数时遇到了一个非常简单的问题。问题是: 这不起作用:未将searchterm传递给此。searchFacilities ngOnInit() { this.searchTerm$.subscribe(searchterm => this.searchFacilities);/**Not working here**/ } searchFacilities(term: string){
ngOnInit() {
this.searchTerm$.subscribe(searchterm => this.searchFacilities);/**Not working here**/
}
searchFacilities(term: string){
console.log(term);
this.facilityservice.searchFacilities(term)
.subscribe(results => this.facilityList = results);
}
但这是有效的:
this.searchTerm$.subscribe(searchterm => { this.searchFacilities(searchterm); })
很明显,我有其他的解决方案,这些解决方案非常简单,但我真的很想了解为什么我的第一种方法不起作用。谢谢 因为你得到了对搜索词的引用,但你没有用它做任何事情。您只需执行
this.searchTerm$.subscribe(this.searchFacilities)
即可,该术语将被传递到函数中 因为你得到了对搜索词的引用,但你没有用它做任何事情。您只需执行this.searchTerm$.subscribe(this.searchFacilities)
即可,该术语将被传递到函数中 因为参数没有直接传递给函数
示例来自:
与箭头函数相同的示例:
Rx.Observable.range(0, 3).subscribe(x => console.log(x));
因为参数不是直接传递给函数的 示例来自: 与箭头函数相同的示例:
Rx.Observable.range(0, 3).subscribe(x => console.log(x));
您searchFacilities函数在全局范围内声明,然后作为回调在ngOnInit内部调用,其上下文不再是全局范围,现在此指向ngOnInit元素对象。为了在ngOnInit对象内部工作,您需要绑定它,然后searchFacilities成为ngOnInit的方法,这样它就会工作。您searchFacilities函数在全局范围内声明,然后在ngOnInit内部作为回调调用,其上下文不再是全局范围,现在这个指向ngOnInit元素对象。为了在ngOnInit对象内部工作,您需要绑定它,然后搜索工具成为ngOnInit的方法,这样它就可以工作了。小说明。文档说您需要将回调传递给
subscribe()
,并且该回调将接收可观察对象发出的值
我们可以这样写:
constmycallback=(val)=>console.log(val);
可观察范围(0,3)。订阅(myCallBack);
在您的情况下,您已经有一个回调,this.searchFacilities
这意味着您可以简单地编写:
this.searchTerm$.subscribe(this.searchFacilities);
就像您可以将我的原始示例改写为:
//现在`console.log`是回调!
可观测范围(0,3).subscribe(console.log);
换句话说,问题不是“为什么箭头函数不传递参数”。问题是您创建了一个箭头函数,其主体是您的回调函数,而不是直接使用回调函数
代码的扩展版本如下所示:
constmycallback=(searchterm)=>{
归还此设备;
}
如您所见,searchFacilities
既没有被调用,也没有收到searchterm
参数
通过编写以下代码,非ARROW函数也可能会遇到同样的问题(尽管ARROW函数的语法确实会使错误更容易发生且更隐蔽):
const myCallBack=函数(searchterm){
归还此设备;
}
小澄清。文档说您需要将回调传递给subscribe()
,并且该回调将接收可观察对象发出的值
我们可以这样写:
constmycallback=(val)=>console.log(val);
可观察范围(0,3)。订阅(myCallBack);
在您的情况下,您已经有一个回调,this.searchFacilities
这意味着您可以简单地编写:
this.searchTerm$.subscribe(this.searchFacilities);
就像您可以将我的原始示例改写为:
//现在`console.log`是回调!
可观测范围(0,3).subscribe(console.log);
换句话说,问题不是“为什么箭头函数不传递参数”。问题是您创建了一个箭头函数,其主体是您的回调函数,而不是直接使用回调函数
代码的扩展版本如下所示:
constmycallback=(searchterm)=>{
归还此设备;
}
如您所见,searchFacilities
既没有被调用,也没有收到searchterm
参数
通过编写以下代码,非ARROW函数也可能会遇到同样的问题(尽管ARROW函数的语法确实会使错误更容易发生且更隐蔽):
const myCallBack=函数(searchterm){
归还此设备;
}
searchterm=>this.searchFacilities
=函数(searchterm){返回this.searchFacilities}
为什么要调用this.searchFacilities(searchterm)
?O.oJust dothis.searchTerm$.subscribe(this.searchFacilities)代码>在引用时将箭头省略!我真的怀疑最后一个片段是否真的有用work@Bergi-你说得对,我订阅了另一个主题,它也调用了这个方法…我在测试中被搞混了。谢谢!@adeneo-这实际上更干净了,只要我停下来想一想,它就有意义了。+1searchterm=>这个。searchFacilities
=函数(searchterm){return this.searchFacilities}
为什么要调用this.searchFacilities(searchterm)
?O.oJust dothis.searchterm$.subscribe(this.searchFacilities);
在引用时,您省略了箭头!我真的怀疑最后一个代码片段是否正确work@Bergi-你说得对,我还有另一个主题我订阅了一个调用此方法的。。