Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/437.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_Youtube Api - Fatal编程技术网

Javascript 访问窗口函数typescript上的类数据

Javascript 访问窗口函数typescript上的类数据,javascript,angular,typescript,youtube-api,Javascript,Angular,Typescript,Youtube Api,我正在用Angular 2构建一个应用程序,我也在使用YouTube IFrame API Youtube API要求我向全局对象声明一些函数,因此这是我的代码: export class MyClass { someData: any; constructor( ... ) { ... } loadAPI(){ (window as any).onYouTubeIframeAPIReady = function () { buildPlayer

我正在用Angular 2构建一个应用程序,我也在使用YouTube IFrame API

Youtube API要求我向全局对象声明一些函数,因此这是我的代码:

export class MyClass {

  someData: any;

  constructor( ... ) {
    ...
  }

  loadAPI(){
    (window as any).onYouTubeIframeAPIReady = function () {
      buildPlayer();
    }

    var tag = document.createElement('script');
    tag.src = "https://www.youtube.com/iframe_api";
    var firstScriptTag = document.getElementsByTagName('script')[0];
    firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);
    console.log('API loaded');
  }

}
很好,那么,在课堂之外,我有:

function buildPlayer(){
  player = new YT.Player('player', {
    events: {
      'onReady': onPlayerReady,
      'onStateChange': onPlayerStateChange
    }
  });
  console.log('youtube iframe api ready!');
}

function onPlayerReady(event){
  // HERE IS MY PROBLEM
  // I want to manipulate "someData" in these functions
}

function onPlayerStateChange(status){
  // HERE IS MY PROBLEM
}

我想在这些函数中操作一些来自MyClass(即从数据库检索)的数据,但当我尝试使用“this.data”访问它时,它会说它未定义。我该怎么做呢?

不确定是否使用Angular 2,但我认为它需要是“event.data

我在葡萄牙语版本的stackoverflow的帮助下找到了答案。 我要做的是在类之外声明变量,就像函数一样。所以是这样的:

let someData: any;

export class MyClass {    

    someData: any; // after manipulate the data in here, I can just
                   // set it like this: someData = this.someData;  

    constructor() {

    }

    loadAPI(){
    (window as any).onYouTubeIframeAPIReady = function () {
      buildPlayer();
    }

    var tag = document.createElement('script');
    tag.src = "https://www.youtube.com/iframe_api";
    var firstScriptTag = document.getElementsByTagName('script')[0];
    firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);
    console.log('API loaded');
    }
} 

function buildPlayer(){
  player = new YT.Player('player', {
    events: {
      'onReady': onPlayerReady,
      'onStateChange': onPlayerStateChange
    }
  });
  console.log('youtube iframe api ready!');
}

function onPlayerReady(event){
    // I can manipulate it here
    console.log(someData);   
}

function onPlayerStateChange(status){
    // I can manipulate it here
    console.log(someData);        
}

这是一件简单的事情,我的想法太复杂了。我希望这对其他人有所帮助。

实际上,如果我使用“event.data”,我正在访问“YT player”数据。那不是我想要的。假设我在我的类中有一个名为“id”的属性,我想在这些函数中使用这个id,我如何访问它?如果您使用的数据是与youtube频道视频相关的信息,则有播放器的附带脚本。否则,如果您只想同时运行外部内容,请在youtube函数中调用一个函数来执行您想要的操作。我编辑了这个问题,以便更好地指定我想要的内容。如果返回“未定义”,则很可能代码在某个地方有错误(或者您的信息没有返回)。未定义可以覆盖代码中的许多问题。我建议你慢慢检查你所有的代码是否有错误。我想你不会明白的。这里的问题不是打字错误或错误。问题是放在类之外的函数在窗口范围内,当我试图访问类的数据时,它们会得到未定义的值。