javascript - 在 window 函數中存取類別資料 typescript
我正在使用 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」訪問它時,它說未定義。我該怎麼做?
答案#1
不確定是否使用 Angular 2,但我認為它應該是「event.data」。」
答案#2
我在葡萄牙語版的 Stack Overflow 上找到了一些幫助得到的答案。我必須做的是像函數一樣,在類之外聲明變量。所以它是這樣的:
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);
}
這是一件簡單的事情,而我想得太複雜了。我希望這能幫助其他人。
