Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/32.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript typescript中的作用域变量_Javascript_Angular_Typescript_Ionic2_Ionic3 - Fatal编程技术网

Javascript 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

我正在离子2应用程序上使用Angular 2(Typescript)。我有一个类
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 over
var=this
或无数其他方法中的一种来确保新函数中的
this
是您想要的。但是当我更新siteformFromPage时,siteForm不会更新到我已经用第二种解决方案更新了,这行吗?是的,这行得通,但请看前面的问题,使用绑定或箭头功能有更好的解决方案。但是当我更新siteformFromPage时,siteForm不会更新到我使用第二个解决方案更新了,这会起作用吗?是的,这会起作用,但请看上面的问题,使用绑定或箭头功能有更好的解决方案。你能详细解释一下这个
=>
(箭头功能)吗我是爱奥尼亚的新手2@CampDev这个问题已标记为重复问题。查看页面顶部,了解更多有关JavaScript如何处理
关键字的信息。您能给我解释一下有关此
=>
(箭头函数)的更多信息吗?我是爱奥尼亚的新手2@CampDev这个问题已标记为重复问题。查看页面顶部,了解更多有关JavaScript如何处理
this
关键字的信息。