網站搜尋

node.js - Angular 我如何在元件中使用嵌入腳本


我正在嘗試在 Angular 中設置一種只有在直播在線時才顯示 Twitch 播放器的方法,所以在文檔中有這個內聯 HTML:

<script src= "https://player.twitch.tv/js/embed/v1.js"></script>
<div id="<player div ID>"></div>
<script type="text/javascript">
  var options = {
    width: <width>,
    height: <height>,
    channel: "<channel ID>",
    video: "<video ID>",
    collection: "<collection ID>",
  };
  var player = new Twitch.Player("<player div ID>", options);
  player.setVolume(0.5);
</script>

當然,在 Angular 元件中我們不能使用 <script> 標籤,而且我認為目前也無法在我的元件的 TypeScript 中使用 require 或 import 來使用這個。

那我該如何添加這個功能呢?我明白在我能真正引用那個 script 標籤之後該怎麼做。

答案#1

你可以動態地創建一個 script 標籤,但我認為直接下載腳本並將其放入資產資料夾,然後在 angular.json 中將腳本添加到腳本列表會更容易。

或者你可以將腳本添加到 index.html 的 head 區段

index.html

<head>
    <script src= "https://player.twitch.tv/js/embed/v1.js"></script>
    ...
</head>

將此添加到元件的 ngOninit 方法

      ngOnInit() {
        var options = {
            width: <width>,
            height: <height>,
            channel: "<channel ID>",
            video: "<video ID>",
            collection: "<collection ID>",
          };
          var player = new Twitch.Player("<player div ID>", options);
          player.setVolume(0.5);
       }

組件範本

    <div id="<player div ID>"></div>

你可能會發現像 Twitch 的 Angular 套件這樣的解決方案可能會更乾淨一些

已更新

TypeScript 會出現像 [ts] 無法找到名稱 'Twitch'. [2304] 這樣的錯誤。有些函式庫有型別定義檔,但在我們的情況下,如果你只在這個檔案中使用 Twitch 物件,你可以加入這個語句來告訴 TypeScript 有關 Twitch 物件的資訊

declare const Twitch: any;

如果你想在多個元件上使用 Twitch

src/global.d.ts

 declare const Twitch: any;

最終建議

安裝 npm i twitch-js 並像這樣導入 Twitch 物件

import Twitch from 'twitch-js'

這將由 webpack 打包,所以你不需要在 HTML 中添加任何 script 標籤。

Twitch 開發者

答案#2

為這個問題掙扎了一段時間。我的腳本是非同步的,最後我發現了 postscribe 套件。效果就像魔法一樣。

npm install --save postscribe

在程式碼中:

import postscribe from 'postscribe'

//The script you want to load
const script = '<script src="https://darksky.net/map-embed/@radar,41.88,-87.62,10.js?embed=true&timeControl=false&fieldControl=false&defaultField=radar"></script>';

postscribe('#yourDivName', script);