Javascript 访问窗口函数typescript上的类数据
我正在用Angular 2构建一个应用程序,我也在使用YouTube IFrame API Youtube API要求我向全局对象声明一些函数,因此这是我的代码: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
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函数中调用一个函数来执行您想要的操作。我编辑了这个问题,以便更好地指定我想要的内容。如果返回“未定义”,则很可能代码在某个地方有错误(或者您的信息没有返回)。未定义可以覆盖代码中的许多问题。我建议你慢慢检查你所有的代码是否有错误。我想你不会明白的。这里的问题不是打字错误或错误。问题是放在类之外的函数在窗口范围内,当我试图访问类的数据时,它们会得到未定义的值。