ReferenceError: $ не определено в Angular - PullRequest
0 голосов
/ 06 сентября 2018

Я хочу показать диалоговое окно при запуске моего приложения, но я получаю ошибку ReferenceError: $ is not defined, хотя я определил его как declare var $: any;. Демо-версия на https://stackblitz.com/edit/angular-gnwe2c

Если вы проверите консоль, вы увидите ошибку.

Я определил DialogComponent, который просто Bootstrap модальный в dialog.component.html. У него есть метод showDialog, который вызывает Bootstrap 'modal метод $(this.dialogRef.nativeElement).modal('show');.

В app.component.html я использую DialogComponent - <app-dialog-box #dialogBox ></app-dialog-box>. AppComponent занимает Input и, в зависимости от Input, решает, показывать диалоговое окно или нет

App.component.ts

ngAfterViewInit(){
    if(this.signup!=""){
      if(this.signup === "success") {
      this.showDialog("Signup was successful")
      }else if(this.signup === "error") {
        this.showDialog("Error: Signup wasn't successful")
      } else {
        this.showDialog("Unrecognised message: "+this.signup)
      }
    }

  }

в index.html <my-app [signup]="'success'">loading</my-app>

Кроме того, в index.html я загружаю все javascripts и jquery перед использованием my-app, поэтому я ожидаю, что $ должно быть доступно.

ОБНОВЛЕНИЕ - Вот интересное поведение. Когда я запускаю приложение в первый раз, используя https://angular -gnwe2c.stackblitz.io , я не вижу диалогового окна и вижу ошибку в консоли ReferenceError: $ не определено, но если я изменю код (скажем, введите Enter, Stackblitz обновляет код, и появляется диалоговое окно! Я думаю, что когда приложение загружается изначально, jquery не загружается, но когда я изменяю код, jquery доступен в это время

Ответы [ 2 ]

0 голосов
/ 01 апреля 2019

Не рекомендуется включать скрипты в index.html вручную. Все необходимые пакеты должны быть установлены через npm.

Изменено Демонстрация StackBlitz из исходного вопроса - добавлен импорт для boostrap и jquery в dialog.component.ts. А затем установил недостающие зависимости - jquery, bootstrap и popper.js пакеты.

Надеюсь, это поможет!

0 голосов
/ 08 сентября 2018

Я не смог решить проблему в Stackblitz, но в своем приложении я смог решить проблему, изменив порядок загрузки скриптов

Мое приложение обслуживалось с использованием Play framework,Первоначальный код был

<app-root signup=@signup> 
    </app-root>

        @* Built Angular bundles *@
    <script src="@routes.Assets.versioned("ui/polyfills.js")" type="text/javascript"></script>
    <script src="@routes.Assets.versioned("ui/runtime.js")" type="text/javascript"></script>
    <script src="@routes.Assets.versioned("ui/vendor.js")" type="text/javascript"></script>
    <script src="@routes.Assets.versioned("ui/styles.js")" type="text/javascript"></script>
    <script src="@routes.Assets.versioned("ui/main.js")" type="text/javascript"></script>
    <script src="@routes.Assets.versioned("javascripts/common/vendor/jquery/jquery-3.2.1.js")" type="text/javascript"></script>
    <script src="@routes.Assets.versioned("javascripts/common/vendor/bootstrap/bootstrap.js")" type="text/javascript"></script>

. Я изменил порядок и передвинул jquery и bootstrap до пакета Angular

<script src="@routes.Assets.versioned("javascripts/common/vendor/jquery/jquery-3.2.1.js")" type="text/javascript"></script>
<script src="@routes.Assets.versioned("javascripts/common/vendor/bootstrap/bootstrap.js")" type="text/javascript"></script>
<script src="@routes.Assets.versioned("ui/polyfills.js")" type="text/javascript"></script>
<script src="@routes.Assets.versioned("ui/runtime.js")" type="text/javascript"></script>
<script src="@routes.Assets.versioned("ui/vendor.js")" type="text/javascript"></script>
<script src="@routes.Assets.versioned("ui/styles.js")" type="text/javascript"></script>
<script src="@routes.Assets.versioned("ui/main.js")" type="text/javascript"></script>
.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...