Как использовать jQuery с Angular?

343

Может кто-нибудь сказать мне, как использовать JQuery с Angular ?

class MyComponent {
    constructor() {
        // how to query the DOM element from here?
    }
}

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

Waog
источник
2
Не знаю, какую версию вы использовали во время публикации, но мне достаточно добавить JQuery cdn в index.html, чтобы вызвать $ в компоненте
theFreedomBanana
4
Это может помочь code-sample.com/2016/07/use-jquery-with-angular-2.html
Анил Сингх,
10
Хотя некоторые функции jQuery (особенно плагины или jQueryUI) могут быть очень полезны в приложении Angular2, не рекомендуется запрашивать и манипулировать DOM из компонентов Angular2, как вы описали в своем вопросе. В приложениях Angular2 элементы DOM, которыми вы хотите управлять, должны быть привязаны к вашей компонентной модели. Состояние элементов DOM должно меняться в зависимости от изменений модели. Проверьте этот ответ: stackoverflow.com/questions/42411744/best-practice-of-angular-2
Беньямин Шохам
6
Я думаю, что правильный ответ на это: вы не делаете. Angular более продвинутый и более новый, чем jquery, он не устарел и имеет намного более чистый код
mast3rd3mon
7
Почему человек должен использовать JQuery с Angular?
Кристиан Транина

Ответы:

331

Использование jQuery от Angular2 - это бриз по сравнению с ng1. Если вы используете TypeScript, вы можете сначала обратиться к определению машинописи jQuery.

tsd install jquery --save
or
typings install dt~jquery --global --save

TypescriptDefinitions не требуются, так как вы можете просто использовать anyв качестве типа для$ илиjQuery

В вашем угловом компоненте вы должны ссылаться на элемент DOM из шаблона, используя @ViewChild()После инициализации представления вы можете использовать nativeElementсвойство этого объекта и перейти к jQuery.

Объявление $(или jQuery) как JQueryStatic даст вам типизированную ссылку на jQuery.

import {bootstrap}    from '@angular/platform-browser-dynamic';
import {Component, ViewChild, ElementRef, AfterViewInit} from '@angular/core';
declare var $:JQueryStatic;

@Component({
    selector: 'ng-chosen',
    template: `<select #selectElem>
        <option *ngFor="#item of items" [value]="item" [selected]="item === selectedValue">{{item}} option</option>
        </select>
        <h4> {{selectedValue}}</h4>`
})
export class NgChosenComponent implements AfterViewInit {
    @ViewChild('selectElem') el:ElementRef;
    items = ['First', 'Second', 'Third'];
    selectedValue = 'Second';

    ngAfterViewInit() {
        $(this.el.nativeElement)
            .chosen()
            .on('change', (e, args) => {
                this.selectedValue = args.selected;
            });
    }
}

bootstrap(NgChosenComponent);

Этот пример доступен на плункере: http://plnkr.co/edit/Nq9LnK?p=preview

tslint будет жаловаться на то, что chosenне является свойством на $, чтобы исправить это, вы можете добавить определение к интерфейсу JQuery в свой файл * .d.ts.

interface JQuery {
    chosen(options?:any):JQuery;
}    
werenskjold
источник
2
Я не уверен, почему setTimeoutтребуется обходной путь. Я пробовал с несколькими другими компонентами jQuery, и кажется, что все они требуют этого обходного пути для правильной инициализации. Я надеюсь, что это изменится в будущем выпуске ng2
werenskjold
7
новые функции обратного вызова , которые были добавлены в alpha37 github.com/angular/angular/blob/2.0.0-alpha.37/CHANGELOG.md ядра: добавлена afterContentInit, afterViewInit и afterViewChecked крючки (d49bc43), закрывает # 3897
Моурад Zouabi
18
это не так сложно настроить, но это, конечно, не "легкий ветерок" по сравнению с угловым 1. в угловом 1 вам не нужно ничего делать, и вы можете просто использовать jquery где угодно. Угловой 1 построен на основе jquery.
user428517 14.09.16
8
После установки определений через наборы JQueryStatic по-прежнему не распознаются.
Гонсало
4
Я думаю, что нам нужно немного обновить это, так как теперь мы используем NPM для набора текста
Джеки
122

Почему все делают это ракетостроением? Для всех, кому нужно сделать некоторые базовые вещи над статическими элементами, например, bodyтег, просто сделайте это:

  1. В index.html добавить script тег с путем к вашей библиотеке jquery, не имеет значения где (таким образом вы также можете использовать условные теги IE для загрузки более низкой версии jquery для IE9 и менее).
  2. В вашем export componentблоке есть функция, которая вызывает ваш код: $("body").addClass("done");обычно это вызывает ошибку объявления, так что после всего импорта в этот файл .ts добавьте, declare var $:any;и вы готовы!
Starwave
источник
21
Не работает для меня Так что я собираюсь изучать ракетостроение. :)
Праджит Шреста
11
Точка углового 2 состоит в том, чтобы устранить сложность обращения с DOM. Angular 2 имеет алгоритм diff, который будет эффективно визуализировать ваши компоненты, поэтому лучше обмануть, что он манипулирует DOM, указывая его на угловой компонент 2, вместо того, чтобы напрямую манипулировать DOM.
Кен
4
intellisense, мой друг, вот почему
Ayyash
5
declare var $:any;для победы!
Tylerlindell
2
Это определенно работает, но если вы больше не живете в каменном веке, используйте вместо этого принятый ответ.
JLH
112

Это то, что сработало для меня.

ШАГ 1 - обо всем по порядку

// In the console
// First install jQuery
npm install --save jquery
// and jQuery Definition
npm install -D @types/jquery

ШАГ 2 - ИМПОРТ

// Now, within any of the app files (ES2015 style)
import * as $ from 'jquery';
//
$('#elemId').width();

// OR

// CommonJS style - working with "require"
import $ = require('jquery')
//
$('#elemId').width();

#ОБНОВИТЬ - Feb - 2017

В последнее время я пишу код с ES6вместо typescriptи могу importбез * as $в import statement. Вот как это выглядит сейчас:

import $ from 'jquery';
//
$('#elemId').width();

Удачи.

Акаша
источник
50
У меня ушел час на то, чтобы понять, как поместить jQuery в Angular 2 (правильно) ... Уверен, что веб-разработка идет в обратном направлении.
Starboy
1
Чтобы импортировать $ из работы 'jquery', вам нужно установить --allowJs
titusfx
1
import * as $ from 'jquery';в app.module.ts, чтобы сделать его доступным для всего проекта. И кстати: "Почему --save вместо --save-dev?"
Мартин Шнайдер,
3
import $ from 'jquery';Это самый красивый оператор импорта jquery на этой странице. Именно так, как я хотел бы, чтобы это выглядело.
cs_pupil
1
@Starboy потому, что вам не нужно никакого JQuery в приложении Angular, и если вы это сделаете, вы, скорее всего, делаете что-то не так.
phil294
55

Теперь это стало очень просто. Вы можете сделать это, просто объявив переменную jQuery любого типа внутри контроллера Angular2.

declare var jQuery:any;

Добавьте это сразу после операторов импорта и перед декоратором компонента.

Чтобы получить доступ к любому элементу с идентификатором X или Class X, вам просто нужно сделать

jQuery("#X or .X").someFunc();
Девеш Жадон
источник
Проверено, это работает для angular 2 с веб-пакетом (шаблон SPA, сгенерированный yeoman Aspnetcore SPA). Часто самый простой подход работает лучше всего! Спасибо.
binjiezhao
1
Я использую его в своем проекте, но недостаток этого метода в том, что мы теряем все возможности сильных типов для типов jQuery :)
trungk18
Работа в Angular 6 (6.0.3)
Алехандро Моран
Работа в: Angular CLI: 7.1.4 Узел: 10.15.0
Ланс
28

Простой способ:

1. включить скрипт

index.html

<script type="text/javascript" src="assets/js/jquery-2.1.1.min.js"></script>

2. объявить

my.component.ts

declare var $: any;

3. использовать

@Component({
  selector: 'home',
  templateUrl: './my.component.html',
})
export class MyComponent implements OnInit {
 ...
  $("#myselector").style="display: none;";
}
Йосам Ли
источник
Работал на меня. Но вместо того, чтобы реализовывать OnInit (который Angular не хотел принимать), я использовал внутри MyComponent ngOnInit () {// мой jQuery здесь}
Илья Кушлянский
25

Пожалуйста, следуйте этим простым шагам. Это сработало для меня. Давайте начнем с нового приложения Angular 2, чтобы избежать путаницы. Я использую Angular Cli. Итак, установите его, если у вас его еще нет. https://cli.angular.io/

Шаг 1. Создайте демо-приложение Angular 2

ng new jquery-demo

Вы можете использовать любое имя. Теперь проверьте, работает ли он, запустив ниже cmd. (Теперь убедитесь, что вы указываете на 'jquery-demo', если не используете команду cd)

ng serve

вы увидите "приложение работает!" в браузере.

Шаг 2: Установите Bower (менеджер пакетов для Интернета)

Запустите эту команду на cli (убедитесь, что вы указываете на 'jquery-demo', если не используете команду cd):

npm i -g bower --save

Теперь, после успешной установки bower, создайте файл 'bower.json' с помощью следующей команды:

bower init

Он будет запрашивать ввод, просто нажмите ввод для всех, если вы хотите значения по умолчанию, и в конце введите «Да», когда он спросит «Хорошо выглядит?»

Теперь вы можете увидеть новый файл (bower.json) в папке "jquery-demo". Вы можете найти больше информации на https://bower.io/

Шаг 3: Установите jquery

Запустите эту команду

bower install jquery --save

Это создаст новую папку (bower_components), которая будет содержать установочную папку jquery. Теперь у вас установлен jquery в папке 'bower_components'.

Шаг 4: Добавьте местоположение jquery в файл angular-cli.json

Откройте файл angular-cli.json (присутствует в папке jquery-demo) и добавьте расположение jquery в «scripts». Это будет выглядеть так:

"scripts": ["../bower_components/jquery/dist/jquery.min.js"
              ]

Шаг 5: написать простой код jquery для тестирования

Откройте файл app.component.html и добавьте простую строку кода. Файл будет выглядеть следующим образом:

<h1>
  {{title}}
</h1>
<p>If you click on me, I will disappear.</p>

Теперь откройте файл app.component.ts и добавьте объявление переменной jquery и код для тега p. Вам также следует использовать хук жизненного цикла ngAfterViewInit (). После внесения изменений файл будет выглядеть так:

import { Component, AfterViewInit } from '@angular/core';
declare var $:any;

@Component({
     selector: 'app-root',
     templateUrl: './app.component.html',
     styleUrls: ['./app.component.css']
})
export class AppComponent {
     title = 'app works!';

     ngAfterViewInit(){
           $(document).ready(function(){
             $("p").click(function(){
             $(this).hide();
             });
           });
     }
}

Теперь запустите приложение angular 2 с помощью команды «ng serve» и протестируйте его. Он должен работать.

AmanDeepSharma
источник
3
ПО МОЕМУ МНЕНИЮ. Это лучший подход, который я до сих пор использую bower для клиентских зависимостей.
Fırat KÜÇÜK
" $("p").click(function(){ $(this).hide(); });" лучший пример того, когда не использовать jQuery в Angular ?!
Мартин Шнайдер,
3
Разве не проще настроить только с помощью npm? npm install jquery --save, затем "scripts":["../node_modules/jquery/dist/jquery.js"], затем import $ from 'jquery';в * .ts файлах. В чем преимущество использования беседки?
cs_pupil
1
@cs_pupil Вы также можете использовать npm, но Bower предназначен для управления только внешними пакетами. Есть подстановки stackoverflow.com/questions/18641899/...
AmanDeepSharma
1
@ AmanDeepSharma, спасибо! Как ни странно, похоже, что беседка устарела. npm install bowernpm WARN deprecated bower@1.8.0:
получен
13

Вы можете реализовать хук жизненного цикла ngAfterViewInit (), чтобы добавить некоторые манипуляции с DOM

ngAfterViewInit() {
            var el:any = elelemtRef.domElement.children[0];
            $(el).chosen().on('change', (e, args) => {
                _this.selectedValue = args.selected;
            });
}

Будьте осторожны при использовании маршрутизатора, поскольку angular2 может перезапускать представления ... поэтому вы должны быть уверены, что манипуляции с элементами DOM выполняются только при первом вызове afterViewInit .. (для этого можно использовать статические логические переменные)

class Component {
    let static chosenInitialized  : boolean = false;
    ngAfterViewInit() {
        if (!Component.chosenInitialized) {
            var el:any = elelemtRef.domElement.children[0];
            $(el).chosen().on('change', (e, args) => {
                _this.selectedValue = args.selected;
            });
            Component.chosenInitialized = true;
        }
    }
}
Мурад Зуаби
источник
3
Property 'domElement' does not exist on type ElementRef
villasv
12

Я делаю это более простым способом - сначала установите jquery с помощью npm в консоли: npm install jquery -Sа затем в файле компонента я просто пишу: let $ = require('.../jquery.min.js')и это работает! Вот полный пример из некоторого моего кода:

import { Component, Input, ElementRef, OnInit } from '@angular/core';
let $ = require('../../../../../node_modules/jquery/dist/jquery.min.js');

@Component({
    selector: 'departments-connections-graph',
    templateUrl: './departmentsConnectionsGraph.template.html',
})

export class DepartmentsConnectionsGraph implements OnInit {
    rootNode : any;
    container: any;

    constructor(rootNode: ElementRef) {
      this.rootNode = rootNode; 
    }

    ngOnInit() {
      this.container = $(this.rootNode.nativeElement).find('.departments-connections-graph')[0];
      console.log({ container : this.container});
      ...
    }
}

В teplate у меня есть, например:

<div class="departments-connections-graph">something...</div>

РЕДАКТИРОВАТЬ

В качестве альтернативы вместо использования:

let $ = require('../../../../../node_modules/jquery/dist/jquery.min.js');

использование

declare var $: any;

и в ваш index.html положить:

<script src="assets/js/jquery-2.1.1.js"></script>

Это инициализирует jquery только один раз в глобальном масштабе - это важно, например, для использования модальных окон в начальной загрузке ...

Камил Келчевски
источник
я не знаю, я никогда не использую angular-cli, но я использую angular2-webpack-starter, и он там работает.
Камиль Келчевски
откуда взялся этот метод require?
omeralper
stackoverflow.com/questions/23603514/…
Камиль Келчевски
1
У вас есть опечатка => console.log({ conatiner : this.container});исправить этоconsole.log({ container: this.container});
eric.dummy
11

Шаг 1: используйте команду: npm install jquery --save

шаг 2: вы можете просто импортировать angular как:

импортировать $ из 'jquery';

вот и все .

Примером может быть:

import { Component } from '@angular/core';
import  $ from 'jquery';
@Component({
  selector: 'app-root',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.css']
})

export class AppComponent {
  title = 'app';
  constructor(){
    console.log($('body'));
  }


}
Лакшмиканта Наяк
источник
Модуль ..node_modules / @ types / jquery / index "'не имеет экспорта по умолчанию
Дмитрий Гринько
10

// установка jquerynpm install jquery --save

// установка определения типа для jquerytypings install dt~jquery --global --save

// добавление библиотеки jquery в файл конфигурации сборки, как указано (в файле "angular-cli-build.js")

vendorNpmFiles: [
  .........
  .........
  'jquery/dist/jquery.min.js'
]

// запускаем сборку, чтобы добавить библиотеку jquery в сборку ng build

// добавление конфигурации относительного пути (в system-config.js) /** Map relative paths to URLs. */ const map: any = { ....., ......., 'jquery': 'vendor/jquery/dist' };

/** User packages configuration. */
const packages: any = {
......,
'jquery':{ main: 'jquery.min',
format: 'global',
defaultExtension: 'js'}};

// импортируем библиотеку jquery в ваш файл компонента

import 'jquery';

ниже приведен фрагмент кода моего примера компонента

import { Component } from '@angular/core';
import 'jquery';
@Component({
  moduleId: module.id,
  selector: 'app-root',
  templateUrl: 'app.component.html',  
  styleUrls: ['app.component.css']
})
export class AppComponent {
  list:Array<number> = [90,98,56,90];
  title = 'app works!';
  isNumber:boolean = jQuery.isNumeric(89)  
  constructor(){}
}
БАЛА
источник
Это прекрасно работает для проектов ng-cli. Спасибо!
Чанакья Вадла
Супер пятно! Я использую Angular-Cli для своего проекта, и это золото! Рок на
Логан H
У меня нет файла angular-cli-build.js: /
Гонсало
10

Если вы используете angular-cli, вы можете сделать:

  1. Установите зависимость :

    npm установить jquery --save

    npm install @ types / jquery --save-dev

  2. Импортировать файл :

    Добавьте "../node_modules/jquery/dist/jquery.min.js" в раздел "script" в файле .angular-cli.json

  3. Объявить jquery :

    Добавьте «$» в раздел «types» tsconfig.app.json

Вы можете найти более подробную информацию на официальном угловом документе.

Jahal
источник
1
Это вызывает следующую ошибку при сборке: ОШИБКА в ошибке TS2688: Не удается найти файл определения типа для '$'.
изображение
ошибка TS1192: модуль '' jquery '' не имеет экспорта по умолчанию
Дмитрий Гринько,
8

Использовать Jquery в Angular2 (4)

Следуйте этим инструкциям

установить определение типа Jquery и Juqry

Для установки Jquery npm install jquery --save

Для определения типа Jquery Установка npm install @types/jquery --save-dev

а затем просто импортировать JQuery

import { Component } from '@angular/core';
import * as $ from 'jquery';

@Component({
  selector: 'app-root',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.css']
})
export class AppComponent { 
  console.log($(window)); // jquery is accessible 
}
Васим Хаят
источник
1
DUP из ответа Акаши в !?
Мартин Шнайдер
7

Использование Angular Cli

 npm install jquery --save

В angular.json под массив скриптов

"scripts": [ "node_modules/jquery/dist/jquery.min.js" ] // copy relative path of node_modules>jquery>dist>jquery.min.js to avoid path error

Теперь, чтобы использовать jQuery, все, что вам нужно сделать, это импортировать его следующим образом в любой компонент, который вы хотите использовать jQuery.

Например, импорт и использование jQuery в корневом компоненте

import { Component, OnInit  } from '@angular/core';
import * as $ from 'jquery'; // I faced issue in using jquery's popover
Or
declare var $: any; // declaring jquery in this way solved the problem

@Component({
  selector: 'app-root',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.css']
})
export class AppComponent implements OnInit {


ngOnInit() {
}

jQueryExampleModal() { // to show a modal with dummyId
   $('#dummyId').modal('show');
}
varundhariyal
источник
путь неверный, используйте ./node_modules вместо ../node_modules
Викас Кандари
4

Так как я тупица, я подумал, что было бы хорошо иметь какой-нибудь рабочий код.

Кроме того, версия angular-транспортир Angular2 имеет проблемы с jQuery $ , поэтому лучший ответ не дает мне чистую компиляцию.

Вот шаги, которые я должен работать:

index.html

<head>
...
    <script   src="https://code.jquery.com/jquery-3.1.1.min.js"   integrity="sha256-hVVnYaiADRTO2PzUGmuLJr8BLUSjGIZsDYGmIJLv2b8="   crossorigin="anonymous"></script>
...
</head>

Внутри my.component.ts

import {
    Component,
    EventEmitter,
    Input,
    OnInit,
    Output,
    NgZone,
    AfterContentChecked,
    ElementRef,
    ViewChild
} from "@angular/core";
import {Router} from "@angular/router";

declare var jQuery:any;

@Component({
    moduleId: module.id,
    selector: 'mycomponent',
    templateUrl: 'my.component.html',
    styleUrls: ['../../scss/my.component.css'],
})
export class MyComponent implements OnInit, AfterContentChecked{
...
    scrollLeft() {

        jQuery('#myElement').animate({scrollLeft: 100}, 500);

    }
}
Джон
источник
4

Просто пиши

declare var $:any;

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

<script src="https://code.jquery.com/jquery-3.3.1.js"></script>

это сработало для меня

Дивьеш Патель
источник
2


1) Для доступа к DOM в компоненте.

import {BrowserDomAdapter } from '@angular/platform-browser/src/browser/browser_adapter';
constructor(el: ElementRef,public zone:NgZone) {
     this.el = el.nativeElement;
     this.dom = new BrowserDomAdapter();
 }
 ngOnInit() {
   this.dom.setValue(this.el,"Adding some content from ngOnInit"); 
 }

Вы можете включить jQuery следующим образом. 2) Включите ваш файл jquery в index.html перед загрузкой angular2

      <head>
    <title>Angular 2 QuickStart</title>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <link rel="stylesheet" href="styles.css">

    <!-- jquery file -->
    <script src="js/jquery-2.0.3.min.js"></script>
    <script src="js/jquery-ui.js"></script>
    <script src="node_modules/es6-shim/es6-shim.min.js"></script>
    <script src="node_modules/zone.js/dist/zone.js"></script>
    <script src="node_modules/reflect-metadata/Reflect.js"></script>
    <script src="node_modules/systemjs/dist/system.src.js"></script>
    <script src="systemjs.config.js"></script>
    <script>
      System.import('app').catch(function(err){ console.error(err); });
    </script>
  </head>

Вы можете использовать Jquery следующим образом, здесь я использую JQuery Ui выбора даты.

    import { Directive, ElementRef} from '@angular/core';
    declare  var $:any;
    @Directive({
      selector: '[uiDatePicker]',
     })
    export class UiDatePickerDirective {
      private el: HTMLElement;
      constructor(el: ElementRef) {
        this.el = el.nativeElement;

     }

    ngOnInit() {
        $(this.el).datepicker({
         onSelect: function(dateText:string) {
            //do something on select
         }
        });
    }
}

Это работа для меня.

оборота user3918700
источник
2

Я пропускаю установку jquery, так как этот момент упоминался во всех постах, созданных до меня. Итак, вы уже установили jquery. Импортировать т в ваш компонент, как это

import * as $ from 'jquery';

будет работать, но есть другой «угловой» способ сделать это путем создания службы.

Шаг № 1: создать файл jquery.service.ts .

// in Angular v2 it is OpaqueToken (I am on Angular v5)
import { InjectionToken } from '@angular/core';
export const JQUERY_TOKEN = new InjectionToken('jQuery');

Шаг. нет. 2: зарегистрировать сервис в app.module.ts

import { JQUERY_TOKEN } from './services/jQuery.service';
declare const jQuery: Object;

providers: [
    { provide: JQUERY_TOKEN, useValue: jQuery },
]

Шаг № 3: внедрить сервис в ваш компонент my-super-duper.component.ts

import { Component, Inject } from '@angular/core';

export class MySuperDuperComponent {
    constructor(@Inject(JQUERY_TOKEN) private $: any) {}

    someEventHandler() {
        this.$('#my-element').css('display', 'none');
    }
}

Буду очень признателен, если кто-нибудь сможет объяснить плюсы и минусы обоих методов: DI jquery как сервис против импорта * как $ из 'jquery';

azakgaim
источник
1

Самый эффективный способ, который я нашел, это использовать setTimeout со временем 0 внутри конструктора страницы / компонента. Это позволит запустить jQuery в следующем цикле выполнения после того, как Angular завершит загрузку всех дочерних компонентов. Могут быть использованы несколько других методов компонентов, но все, что я пробовал, работают лучше всего при запуске внутри setTimeout.

export class HomePage {
    constructor() {
        setTimeout(() => {
            // run jQuery stuff here
        }, 0);
    }
}
Urgo
источник
3
Вы должны определенно использовать, ngOnInit()а не это
xordon
1
ngAfterViewInit ()
Нияз
setTimeoutна самом деле не работает, если у вас есть много элементов *ngForдля рендеринга.
Клодчан
1

Вот что у меня сработало - Angular 2 с веб-пакетом

Я пытался объявить $как тип, anyно всякий раз, когда я пытался использовать любой модуль JQuery, который я получал (например), $(..).datepicker()это не функция

Поскольку Jquery включен в мой файл vendor.ts, я просто импортировал его в свой компонент, используя

import * as $ from 'jquery';

Теперь я могу использовать плагины Jquery (например, bootstrap-datetimepicker)

raghav710
источник
Обратите внимание, что ваше приложение будет загружаться в 5 раз дольше.
Jake
@jake это из-за времени, затраченного на загрузку библиотек начальной загрузки?
raghav710
Нет, JQuery занимает больше времени. ! самозагрузки == Twitter Bootstrap
Jake
@ Джейк ой! Я имел в виду jquery, я думаю. Спасибо за примечание
raghav710
@jake, не могли бы вы объяснить, почему приложение загружается в 5 раз дольше, если сделать jquery доступным для всего приложения
Marvel Moe
1

Вы также можете попробовать импортировать его с помощью «InjectionToken». Как описано здесь: Используйте jQuery в Angular / Typescript без определения типа

Вы можете просто внедрить глобальный экземпляр jQuery и использовать его. Для этого вам не понадобятся какие-либо определения типов или наборы.

import { InjectionToken } from '@angular/core';

export const JQ_TOKEN = new InjectionToken('jQuery');

export function jQueryFactory() {
    return window['jQuery'];
}

export const JQUERY_PROVIDER = [
    { provide: JQ_TOKEN, useFactory: jQueryFactory },
];

Когда правильно установлено в вашем app.module.ts:

import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';

import { AppComponent } from './app.component';

import { JQ_TOKEN } from './jQuery.service';

declare let jQuery: Object;

@NgModule({
    imports: [
        BrowserModule
    ],
    declarations: [
        AppComponent
    ],
    providers: [
        { provide: JQ_TOKEN, useValue: jQuery }
    ],
    bootstrap: [AppComponent]
})
export class AppModule { }

Вы можете начать использовать его в своих компонентах:

import { Component, Inject } from '@angular/core';
import { JQ_TOKEN } from './jQuery.service';

@Component({
    selector: "selector",
    templateUrl: 'somefile.html'
})
export class SomeComponent {
    constructor( @Inject(JQ_TOKEN) private $: any) { }

    somefunction() {
        this.$('...').doSomething();
    }
}
Джеффри Росселл
источник
1

Установка Глобальной библиотеки как официальная документация здесь

  1. Установить с npm:

    npm install jquery --save

  2. Добавьте необходимые файлы сценариев в сценарии:

    "scripts": [ "node_modules/jquery/dist/jquery.slim.js" ],

Перезапустите сервер, если вы его используете, и он должен работать в вашем приложении.


Если вы хотите использовать внутри одного компонента, используйте import $ from 'jquery';внутри вашего компонента

Амр Ибрагим
источник
1

Другие уже размещены. но я привожу простой пример, чтобы помочь некоторым новичкам.

Шаг 1: В вашем файле index.html ссылка на jquery cdn

     <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.0/jquery.min.js"></script>

Шаг 2: предположим, что мы хотим показать div или скрыть div при нажатии кнопки:

 <input type="button" value="Add New" (click)="ShowForm();">


 <div class="container">
  //-----.HideMe{display:none;} is a css class----//

  <div id="PriceForm" class="HideMe">
     <app-pricedetails></app-pricedetails>
  </div>
  <app-pricemng></app-pricemng>
 </div>

Шаг 3: В приведенном ниже файле компонента импорт объявляет $ как ниже:

declare var $: any;

чем создать функцию, как показано ниже:

 ShowForm(){
   $('#PriceForm').removeClass('HideMe');
 }

Он будет работать с последними версиями Angular и JQuery.

MJVM
источник
0

Сначала установите jQuery, используя npm следующим образом:

npm install jquery  save

Во-вторых, перейдите к файлу ./angular-cli.json в корне вашей папки проекта Angular CLI, найдите свойство scripts: [] и укажите путь к jQuery следующим образом:

"scripts": [ "../node_modules/jquery/dist/jquery.min.js" ]

Теперь, чтобы использовать jQuery, все, что вам нужно сделать, это импортировать его в любой компонент, который вы хотите использовать jQuery.

import * as $ from 'jquery';
(or)
declare var $: any;

Посмотрите на приведенный ниже код, который использует jQuery для анимации div при нажатии, особенно во второй строке. Мы импортируем все как $ из jQuery.

import { Component, OnInit  } from '@angular/core';
import * as $ from 'jquery';
@Component({
  selector: 'app-root',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.css']
})
export class AppComponent implements OnInit {
  title = 'Look jQuery Animation working in action!';

  public ngOnInit()
  {
    $(document).ready(function(){
        $("button").click(function(){
            var div = $("div");  
            div.animate({left: '100px'}, "slow");
            div.animate({fontSize: '5em'}, "slow");
        });
    });
  }
}
Йогеш Вагмаре
источник
-1

Установить jquery

Терминал $ npm install jquery

(Для начальной загрузки 4 ...)

Терминал $ npm install popper.js

Терминал $ npm install bootstrap

Затем добавьте importутверждение в app.module.ts.

import 'jquery'

(Для начальной загрузки 4 ...)

import 'popper.js'
import 'bootstrap'

Теперь вам больше не понадобятся <SCRIPT>теги для ссылки на JavaScript.

(На любой CSS, который вы хотите использовать, все еще нужно ссылаться styles.css)

@import "~bootstrap/dist/css/bootstrap.min.css";
Картер Медлин
источник
-1

Когда вы используете Angular, старайтесь не использовать библиотеку jquery. Попробуйте использовать функции и библиотеки, которые создаются для угловой структуры. Если вы хотите использовать функции jquery, такие как find () , html () , closest () и т. Д., Я предлагаю использовать чистый js. пример: querySelector () , innerHTML , parentElement и т. д.

мойтаба рамезани
источник