API Youtube не будет загружаться без обновления моего приложения Angular

#javascript #angular #typescript #youtube-api

#javascript #angular #typescript #youtube-api

Вопрос:

Я не могу загрузить API Iframe YouTube в мое приложение Angular без обновления страницы. При загрузке страницы iframe загружается без каких-либо проблем, но при переходе на страницу с помощью маршрутизации страницы API не вызывается, и iframe не отображается. Я видел некоторые решения в Интернете, но они, похоже, не работают.

Любая помощь будет высоко оценена.

 **HTML**

<div *ngIf="selectedVideo amp;amp; ytLoading">
    <div id="player" style=" height: 500px; width: 100%;">
</div>

 

Компонент

  ytLoading = false;
  player: any;

  
  init() {
    this.ytLoading = true;
    console.log('loading init',this.ytLoading)
    if (this.ytLoading amp;amp; window['YT'] ) {
    
      this.cueVideoById(this.selectedVideo);
      return;
    }
    var tag = document.createElement('script');
    tag.src = 'https://www.youtube.com/iframe_api';
    var firstScriptTag = document.getElementsByTagName('script')[0];
    firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);
  
    window['onYouTubeIframeAPIReady'] = () => this.cueVideoById(this.selectedVideo);
    console.log('WINDOW OBJ 2', window['YT'], 'API SCRIPT 2', tag )
   
  }

  ngOnInit() {


    this.ytLoading = false;
    this.init();

  }

  ngOnDestroy() {
    this.ytLoading = false;

    window['onYouTubeIframeAPIReady'] = null;
    if (this.player) {
      this.player.destroy();
    }
  }


  cueVideoById(selectedVideo) {
    console.log('hits via init', selectedVideo)
    this.player = new window['YT'].Player('player', {
      videoId: selectedVideo.id,
      playerVars: {
        modestbranding: 1,
        controls: 1,
        disablekb: 1,
        rel: 0,
        showinfo: 0,
        fs: 0,
        playsinline: 1
      },
      events: {
        'onStateChange': this.onPlayerStateChange.bind(this),
        'onError': this.onPlayerError.bind(this),
        'onReady': this.onPlayerReady.bind(this),
        
      }
    });


  }

 

Ответ №1:

Проблема была решена путем обновления метода ngOnDestroy

  ngOnDestroy() {
    window['YT'] = null;
    if (this.player) {
      this.player.destroy();
    }
  }