Как включить файл JS в ionic 3

Я ищу способ получить доступ к переменной из внешнего файла js, который я включил в папку активов/данных.

ниже то, что я пробовал

поместил test.js в папку assets/data

в test.js добавлена ​​переменная testvar = "heloo from external js";

добавлен тег скрипта в src/index.html <script src="assets/data/test.js"></script>

в app.component.ts я добавил эту строку после импорта;declare var testvar: any;

в конструкторе добавлена ​​эта строка для регистрации значения console.log(testvar);

результат ошибка : ОШИБКА ReferenceError: тестовая переменная не определена

Итак, как я могу использовать свою переменную js в машинописном тексте?


person rashidnk    schedule 07.05.2017    source источник


Ответы (5)


Это решение помогло только мне

Поместите импорт js в тег заголовка src/index.html перед build/polyfills.js и build/main.js (они находятся в теге body);

Пример: я создал файл src/assets/test.js с var testvar, импортировал в src/index.html, а затем в src/app/app.component.ts объявил declare var testvar;.

test.js

var testvar = "Hello from external js";

index.html

...
  <link rel="icon" type="image/x-icon" href="assets/icon/favicon.ico">
  <link rel="manifest" href="manifest.json">
  <meta name="theme-color" content="#4e8ef7">

  <!-- cordova.js required for cordova apps -->
  <script src="cordova.js"></script>
  <script src="assets/js/test.js"></script> //here, not in body
...

app.componet.ts

declare var testvar;

@Component({
   templateUrl: 'app.html'
})
export class MyApp {
  @ViewChild(Nav) nav: Nav;
  constructor(private statusbar : StatusBar,  splashScreen: SplashScreen) {
   alert(testvar);
...
person rashidnk    schedule 23.05.2017
comment
некоторые предложения, если это не работает: Добавьте :any рядом с объявлением var testvar . Добавьте allowJs:true в файл tsconfig.json в каталоге проекта. - person ; 17.05.2018

Чтобы расширить ответ misha130. Вам нужно будет импортировать его в нужный файл следующим образом:

import * as test from '../assets/data/test'

Таким образом, у вас есть доступ к тестовой переменной.

console.log(test.testvar);
person Logan Garland    schedule 16.05.2017
comment
Чтобы это работало, добавьте declare var testvar; на app.componet.ts, как сказал rashidnk. Затем к testvar можно получить доступ следующим образом: console.log(testvar); Отмечает, что при этом нет необходимости добавлять test.js в index.html. - person tala9999; 04.04.2018

Удалите его из index.html и используйте следующим образом:

import '../assets/data/test';
person misha130    schedule 07.05.2017
comment
ошибка ушла? но как получить доступ к варибале? - person rashidnk; 08.05.2017
comment
console.log(тествар); не определено - person rashidnk; 08.05.2017
comment
Тест теперь var, а не testvar - person misha130; 08.05.2017
comment
твой ответ неполный бро - person rashidnk; 09.05.2017
comment
Я отредактировал ответ и удалил псевдоним, так что, возможно, теперь он менее запутан. Теперь вы можете просто консоль логировать testvar - person misha130; 09.05.2017
comment
импортировать что? Пусто - person Snow; 13.02.2018
comment
куда добавить эту строчку? - person Luca C.; 03.08.2018

Это решение, которое работает для меня на ionic 3.20.0:

  1. Создайте этот файл src/assets/data/test.js. В этом файле объявите эти переменные:

    testvar = "Hello from external js"; // notes: there is no var keywork testvar2 = "Hello from external js"; // notes: there is no var keywork var testvar3 = "Hello from external js"; // this will not work

  2. В app.component.ts добавьте эти строки, чтобы импортировать файл javascript и объявить его переменные:

    import * as test from '../assets/data/test'; // check correct path declare var testvar: any; // each declaration should be on separate line declare var testvar2: any; declare var testvar3: any;

  3. Теперь в app.component.ts вы можете получить доступ к этим переменным следующим образом:

    console.log(testvar); // not test.testvar console.log(testvar2); console.log(testvar3); // will be undefined because of the var keywork

Заключительные слова: нет необходимости добавлять ссылку на test.js в src/index.html, если мы делаем, как указано выше.

person tala9999    schedule 05.04.2018

Ни одно из вышеперечисленных решений не сработало для меня. В первом решении файл js загружается во время загрузки приложения, что не является идеальным решением, когда у вас есть объемный файл js.

Я искал динамическое решение для загрузки внешней библиотеки, и есть библиотека для загрузки асинхронных файлов JavaScript. https://www.npmjs.com/package/scriptjs

Установите пакет:

npm i scriptjs

Затем используйте его в любом месте, как показано ниже:

import { get } from 'scriptjs';

ngOnInit() {

    get("assets/js/searchEmp.js", () => {
        getSerchInspContext = this;
        loadSearchEmp();
    });}

OR

Вы можете просто использовать метод jquery для добавления или удаления тега script в вашем заголовке.

Чтобы добавить файл .js, вызовите строку ниже в ngOnInit():

$('head').append('<script async src="assets/js/search.js"></script>');

Удалить файл .js:

document.querySelector('script[src="assets/js/search.js"]').remove();
person shivam srivastava    schedule 13.11.2019