Javascript typescript中的作用域变量
我正在离子2应用程序上使用Angular 2(Typescript)。我有一个类Javascript typescript中的作用域变量,javascript,angular,typescript,ionic2,ionic3,Javascript,Angular,Typescript,Ionic2,Ionic3,我正在离子2应用程序上使用Angular 2(Typescript)。我有一个类NewFavoriteSitePage具有私有属性siteForm,我可以在类方法中使用此属性,但当我在一个google maps方法中时,此变量未定义。变量的范围是什么,或者如何定义要从双方访问的变量 declare var google; ...... export class NewFavoriteSitePage { ..... private siteForm: FormGroup; load
NewFavoriteSitePage
具有私有属性siteForm
,我可以在类方法中使用此属性,但当我在一个google maps方法中时,此变量未定义。变量的范围是什么,或者如何定义要从双方访问的变量
declare var google;
......
export class NewFavoriteSitePage {
.....
private siteForm: FormGroup;
loadMap(){
//I can access to siteForm here!
.....
google.maps.event.addListener(marker, 'dragend', function(marker, siteForm){
let newlatLng = marker.latLng;
console.log(this.siteForm); //Here this.siteForm is undefined
});
}
谷歌地图之所以没有在这里定义,是因为它是一个函数的回调,这使得“this”不再等于页面,将它放入一个变量将解决这个问题
private siteForm: FormGroup;
loadMap(){
var siteformFromPage=this.siteForm; //this should work
google.maps.event.addListener(marker, 'dragend', function(marker, siteForm){
let newlatLng = marker.latLng;
console.log(siteformFromPage);
});
}
编辑:如果您想要最新的值,您也可以这样尝试:
private siteForm: FormGroup;
loadMap(){
var that=this; //cache that value of the page.
google.maps.event.addListener(marker, 'dragend', function(marker, siteForm){
let newlatLng = marker.latLng;
console.log(that.siteformFromPage);
});
}
谷歌地图之所以没有在这里定义,是因为它是一个函数的回调,这使得“this”不再等于页面,将它放入一个变量将解决这个问题
private siteForm: FormGroup;
loadMap(){
var siteformFromPage=this.siteForm; //this should work
google.maps.event.addListener(marker, 'dragend', function(marker, siteForm){
let newlatLng = marker.latLng;
console.log(siteformFromPage);
});
}
编辑:如果您想要最新的值,您也可以这样尝试:
private siteForm: FormGroup;
loadMap(){
var that=this; //cache that value of the page.
google.maps.event.addListener(marker, 'dragend', function(marker, siteForm){
let newlatLng = marker.latLng;
console.log(that.siteformFromPage);
});
}
使用箭头函数保留上下文:
google.maps.event.addListener(marker, 'dragend', (marker, siteForm) => {
let newlatLng = marker.latLng;
console.log(this.siteForm);
});
使用箭头函数保留上下文:
google.maps.event.addListener(marker, 'dragend', (marker, siteForm) => {
let newlatLng = marker.latLng;
console.log(this.siteForm);
});
我正在使用
公共站点表单:FormGroup
进行测试,但它不起作用。我正在使用下面的声明var站点表单:any
进行测试声明var google
也不起作用。这与typescript或您使用的类型无关。您正在使用自己的新this
创建一个与类本身无关的函数。使用箭头函数,绑定,关闭var that=this
或无数其他方法之一,以确保新函数中的this
符合您的要求。我正在使用public siteForm:FormGroup
进行测试,但它不起作用。我正在使用下面的declare var siteForm:any
进行测试,但不起作用这与typescript或您使用的类型无关。您正在使用自己的新this
创建一个与类本身无关的函数。使用箭头函数、bind、closing overvar=this
或无数其他方法中的一种来确保新函数中的this
是您想要的。但是当我更新siteformFromPage时,siteForm不会更新到我已经用第二种解决方案更新了,这行吗?是的,这行得通,但请看前面的问题,使用绑定或箭头功能有更好的解决方案。但是当我更新siteformFromPage时,siteForm不会更新到我使用第二个解决方案更新了,这会起作用吗?是的,这会起作用,但请看上面的问题,使用绑定或箭头功能有更好的解决方案。你能详细解释一下这个=>
(箭头功能)吗我是爱奥尼亚的新手2@CampDev这个问题已标记为重复问题。查看页面顶部,了解更多有关JavaScript如何处理此
关键字的信息。您能给我解释一下有关此=>
(箭头函数)的更多信息吗?我是爱奥尼亚的新手2@CampDev这个问题已标记为重复问题。查看页面顶部,了解更多有关JavaScript如何处理this
关键字的信息。