Angular ile jQuery nasıl kullanılır?


343

Birisi bana Angular ile jQuery nasıl kullanılır söyleyebilir ?

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

DOM öğesinin sınıfını veya kimliğini önceden değiştirmek gibi geçici çözümler olduğunu biliyorum, ancak bunu yapmanın daha temiz bir yolunu umuyorum.




10
Bazı jQuery işlevleri (özellikle eklentiler veya jQueryUI) bir Angular2 uygulamasında çok yararlı olsa da, sorunuzda açıklandığı gibi DOM'u Angular2 bileşenlerinin içinden sorgulamak ve değiştirmek en iyi yöntem değildir. Angular2 uygulamalarında değiştirmek istediğiniz DOM öğeleri bileşen modelinize bağlı olmalıdır. DOM öğelerinin durumu, model değişikliklerine göre değişmelidir. Bu yanıtı kontrol edin: stackoverflow.com/questions/42411744/best-practice-of-angular-2
Benyamin Shoham

6
Sanırım bunun için doğru cevap: Sen Dont. Açısal
jquery'den

7
Bir kişi neden JQuery'yi Angular ile kullanmalıdır?
Cristian Traìna

Yanıtlar:


331

Angular2'den jQuery kullanmak ng1'e kıyasla çok kolay. TypeScript kullanıyorsanız, önce jQuery typescript tanımına başvurabilirsiniz.

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

Sadece kullanabilirsiniz beri TypescriptDefinitions gerekli değildir anyiçin türü olarak $veyajQuery

Açısal bileşeninizde, şablon @ViewChild()başlatıldıktan sonra şablondan bir DOM öğesine başvuruda bulunmalısınız . Görünüm başlatıldıktan sonra nativeElementbu nesnenin özelliğini kullanabilir ve jQuery'ye geçebilirsiniz.

JQueryStatic olarak bildirmek $(veya jQuery) size jQuery için yazılı bir başvuru verecektir.

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);

Bu örnek dalma pistonunda mevcuttur: http://plnkr.co/edit/Nq9LnK?p=preview

tslint chosen$ üzerinde bir özellik olmamasından şikayet edecek , bunu düzeltmek için özel * .d.ts dosyanızdaki JQuery arabirimine bir tanım ekleyebilirsiniz.

interface JQuery {
    chosen(options?:any):JQuery;
}    

2
setTimeoutGeçici çözümün neden gerekli olduğundan emin değilim . Birkaç diğer jQuery bileşenleri ile denedim ve hepsi doğru başlatma için bu geçici çözümü gerektirir gibi görünüyor. Ben bu ng2
werenskjold

7
alpha37 github.com/angular/angular/blob/2.0.0-alpha.37/CHANGELOG.md çekirdeğine yeni geri aramalar eklendi : # 3897
Mourad Zouabi

18
Bu kurmak o kadar zor değil, ama açısal 1 ile karşılaştırıldığında kesinlikle "bir esinti" değil. Açısal 1'de hiçbir şey yapmak zorunda kalmadınız ve sadece her yerde jquery kullanabilirsiniz. açısal 1 jquery üzerine inşa edilmiştir.
kullanıcı428517

8
Tanımlamaları yazımlara rağmen yükledikten sonra JQueryStatic hala tanınmıyor.
Gonzalo

4
Yazılarda NPM kullandığımız için bunu biraz güncellememiz gerektiğini düşünüyorum
Jackie

122

Neden herkes roket bilimi yapıyor? Statik elemanlar, örneğin bodyetiketi gibi bazı temel şeyler yapması gereken herkes için sadece şunu yapın:

  1. İndex.html'de scriptjquery lib'inizin yolunu içeren etiket ekleme , nerede olduğu önemli değildir (bu şekilde IE9 için daha düşük jquery sürümünü yüklemek için IE koşullu etiketlerini de kullanabilirsiniz).
  2. Senin içinde export component: blokta kodunuzu çağıran bir fonksiyonu var $("body").addClass("done");ekleyin, Normalde bu yüzden sadece bu ts dosyadaki tüm ithalatın sonra, beyan hataya neden declare var $:any;ve gitmek iyidir!

20
Benim için çalışmıyor. Bu yüzden roket bilimi üzerinde çalışacağım. :)
Prajeet Shrestha

11
Açısal 2'nin noktası, DOM ile uğraşmanın karmaşıklığını ortadan kaldırmaktır. Açısal 2, bileşenlerinizi sizin için verimli bir şekilde oluşturacak bir fark algoritmasına sahiptir, bu yüzden DOM'u doğrudan DOM yerine manipüle etmek yerine açısal 2 bileşenine yönlendirerek jquery'yi kandırmak daha iyidir.
ken

4
intellisense, arkadaşım, bu yüzden
Ayyash

5
declare var $:any;kazanmak için!
tylerlindell

2
Bu kesinlikle işe yarıyor, ancak artık taş çağında yaşamıyorsanız, kabul edilen cevapla devam edin.
jlh

112

Bu benim için işe yaradı.

ADIM 1 - İlk önce

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

ADIM 2 - İTHALAT

// 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();

#GÜNCELLEME - Feb - 2017

Son zamanlarda, ben ile kod yazıyorum ES6yerine typescriptve am güçlü importolmadan * as $içinde import statement. Şimdi böyle görünüyor:

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

İyi şanslar.


50
JQuery'yi Angular 2'ye (Düzgün) nasıl koyacağımı anlaması için bir saatim oldu ... Web geliştirmenin geriye doğru gittiğinden eminim.
Starboy

1
'Jquery' işinden $ almak için --allowJs
titusfx

1
import * as $ from 'jquery';içinde app.module.ts projenin tamamı için kullanılabilir hale getirmek için. Ve btw: "Neden --save-dev yerine --save?"
Martin Schneider

3
import $ from 'jquery';Bu sayfadaki en güzel jquery içe aktarma ifadesi imo. Tam olarak neye benzemesini isterdim.
cs_pupil

1
@Starboy çünkü bir Açısal uygulama herhangi bir JQuery gerek yoktur ve eğer yaparsanız, büyük olasılıkla yanlış bir şey yapıyorsunuz.
phil294

55

Şimdi çok kolaylaştı, bunu sadece Angular2 denetleyicisi içindeki herhangi bir türle jQuery değişkenini bildirerek yapabilirsiniz.

declare var jQuery:any;

Bunu içe aktarma ifadelerinden hemen sonra ve bileşen dekoratörünün önüne ekleyin.

X veya Sınıf X kimliğine sahip herhangi bir öğeye erişmek için yapmanız gereken

jQuery("#X or .X").someFunc();

Doğrulandı, bu webpack (yeoman Aspnetcore SPA tarafından oluşturulan bir SPA şablonu) ile açısal 2 için çalışır. Genellikle en basit yaklaşım en iyi sonucu verir! Teşekkürler.
binjiezhao


Çalışma Açısal 6 (6.0.3)
Alejandro Morán

Çalıştığı yerler: Açısal CLI: 7.1.4 Düğüm: 10.15.0
Lance

28

Basit bir yol:

1. komut dosyası ekle

index.html

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

2. beyan etmek

my.component.ts

declare var $: any;

3. kullanımı

@Component({
  selector: 'home',
  templateUrl: './my.component.html',
})
export class MyComponent implements OnInit {
 ...
  $("#myselector").style="display: none;";
}

Benim için çalıştı. Ama OnInit (bu Angular kabul etmek istemiyordu) yerine MyComponent ngOnInit () {// my jQuery here}
Ilya Kushlianski

25

Lütfen bu basit adımları uygulayın. Benim için çalıştı. Herhangi bir karışıklığı önlemek için yeni bir açısal 2 uygulaması ile başlayalım. Angular cli kullanıyorum. Yani, zaten yoksa yükleyin. https://cli.angular.io/

Adım 1: Demo açısal 2 uygulaması oluşturma

ng new jquery-demo

herhangi bir isim kullanabilirsiniz. Şimdi cmd altında çalışıp çalışmadığını kontrol edin.

ng serve

"Uygulama çalışır!" tarayıcıda.

2. Adım: Bower'ı yükleyin (Web için bir paket yöneticisi)

Bu komutu cli üzerinde çalıştırın (cd komutu kullanmıyorsanız 'jquery-demo' yu işaretlediğinizden emin olun):

npm i -g bower --save

Şimdi bower'ın başarıyla kurulumundan sonra, aşağıdaki komutu kullanarak bir 'bower.json' dosyası oluşturun:

bower init

Girişleri isteyecektir, varsayılan değerleri istiyorsanız sadece enter tuşuna basın ve "Evet" yazdığında "Evet" yazar.

Şimdi "jquery-demo" klasöründe yeni bir dosya (bower.json) görebilirsiniz. Daha fazla bilgiyi https://bower.io/ adresinde bulabilirsiniz.

Adım 3: jquery yükleyin

Bu komutu çalıştır

bower install jquery --save

Jquery kurulum klasörü içeren yeni bir klasör (bower_components) oluşturur. Şimdi 'bower_components' klasöründe jquery yüklü.

Adım 4: 'Angular-cli.json' dosyasına jquery konumu ekleyin

'Angular-cli.json' dosyasını açın ('jquery-demo' klasöründe bulunur) ve "komut dosyaları" na jquery konumu ekleyin. Bunun gibi görünecek:

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

Adım 5: Test için basit jquery kodu yazın

'App.component.html' dosyasını açın ve basit bir kod satırı ekleyin. Dosya şu şekilde görünecektir:

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

Şimdi 'app.component.ts' dosyasını açın ve 'p' etiketi için jquery değişkeni bildirimi ve kodu ekleyin. Ayrıca yaşam döngüsü kancası ngAfterViewInit () de kullanmalısınız. Değişiklik yaptıktan sonra dosya şöyle görünecektir:

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();
             });
           });
     }
}

Şimdi açısal 2 uygulamanızı 'ng serve' komutunu kullanarak çalıştırın ve test edin. İşe yaramalı.


3
BENİM NACİZANE FİKRİME GÖRE. Bu hala istemci tarafı bağımlılıkları için bower kullandığım en iyi yaklaşım.
Fırat KÜÇÜK

" $("p").click(function(){ $(this).hide(); });Ne zaman" en iyi örnek yok açısal içinde jQuery kullanmak ?!
Martin Schneider

3
Sadece npm kullanarak kurulum yapmak daha kolay değil mi? npm install jquery --saveArdından "scripts":["../node_modules/jquery/dist/jquery.js"], daha sonra import $ from 'jquery';* ts dosyaları. Bower kullanmanın avantajı nedir?
cs_pupil

1
@cs_pupil npm'yi de kullanabilirsiniz, ancak Bower yalnızca ön uç paketlerini yönetmek için tasarlanmıştır. Bir arama mı stackoverflow.com/questions/18641899/...
AmanDeepSharma

1
@AmanDeepSharma, teşekkürler! Tuhaf bir şekilde, bower'ın reddedildiği anlaşılıyor. npm install bowernpm WARN deprecated bower@1.8.0:
verim

13

Bazı DOM manipülasyonları eklemek için ngAfterViewInit () yaşam döngüsü kancasını uygulayabilirsiniz

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

Yönlendiriciyi kullanırken dikkatli olun çünkü angular2 görünümleri geri dönüştürebilir .. DOM öğelerinin manipülasyonlarının yalnızca afterViewInit öğesinin ilk çağrısında yapıldığından emin olmanız gerekir. (Bunu yapmak için statik boolean değişkenlerini kullanabilirsiniz)

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

Daha basit bir şekilde yapıyorum - önce konsolda npm ile jquery yükleyin: npm install jquery -Sve sonra bileşen dosyasına sadece yazıyorum: let $ = require('.../jquery.min.js')ve işe yarıyor! İşte bazı kodumu tam örnek:

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'de örneğin:

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

DÜZENLE

Alternatif olarak:

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

kullanım

declare var $: any;

ve index.html dosyasında:

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

Bu, jquery'yi yalnızca global olarak bir kez başlatacaktır - bu, örneğin önyüklemede kalıcı pencereler için önemlidir ...


Asla açısal-cli kullanmıyorum ama angular2-webpack-starter kullanıyorum ve orada çalışıyor.
Kamil Kiełczewski

bu ihtiyaç yöntemi nereden geliyor?
omeralper


1
Yazım hatası => console.log({ conatiner : this.container});düzeltinconsole.log({ container: this.container});
eric.dummy

11

1. adım: şu komutu kullanın: npm install jquery --save

Adım 2: Açısal olarak aşağıdaki gibi içe aktarabilirsiniz:

'jquery'den $ içe aktar;

bu kadar .

Örnek olarak şunlar verilebilir:

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'));
  }


}

Modül ..node_modules / @ types / jquery / index "'varsayılan olarak dışa aktarılamaz
Dmitry Grinko

10

// jquery kurulumunpm install jquery --save

// jquery için tür tanımını yüklemetypings install dt~jquery --global --save

// belirtildiği gibi derleme yapılandırma dosyasına jquery kitaplığı ekleme ("angular-cli-build.js" dosyasında)

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

// jquery kütüphanesini derlemeye eklemek için derlemeyi çalıştırın ng build

// göreli yol yapılandırmasını ekleme (system-config.js içinde) /** 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 kütüphanesini bileşen dosyanıza içe aktarın

import 'jquery';

aşağıda örnek bileşenimin kod snipppet'i

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(){}
}

Harika ng-cli projeleri için mükemmel çalışıyor .. Teşekkürler!
Chanakya Vadla

Süper kaygan! Projem için Angular-cli kullanıyorum ve bu altın! Rock on
Logan H

'Angular-cli-build.js' dosyam yok: /
Gonzalo

10

Açısal klips kullanıyorsanız şunları yapabilirsiniz:

  1. Bağımlılığı yükleyin :

    npm install jquery - kaydet

    npm install @ types / jquery --save-dev

  2. Dosyayı içe aktarın :

    .Angular-cli.json dosyasındaki "komut dosyası" bölümüne "../node_modules/jquery/dist/jquery.min.js" dosyasını ekleyin

  3. Jquery ilan et :

    Tsconfig.app.json dosyasının "türler" bölümüne "$" ekleyin

Resmi açısal cli doc hakkında daha fazla bilgi bulabilirsiniz


1
Bu, bina sırasında aşağıdaki hataya neden olur: TS2688 hatası ERROR: '$' için tür tanımı dosyası bulunamıyor.
tasvir

hatası TS1192: '' jquery '' modülünün varsayılan dışa aktarımı yok
Dmitry Grinko

8

Jquery'yi Açısal Olarak Kullanma2 (4)

Bu ayarları uygulayın

Jquery ve Juqry tipi tanımlamayı kurar

Jquery Kurulumu İçin npm install jquery --save

Jquery Tipi Tanımlama Kurulumu için npm install @types/jquery --save-dev

ve sonra jquery'yi içe aktarın

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
arasında Dup AKASH cevabı !?
Martin Schneider

7

Açısal Klibi Kullanma

 npm install jquery --save

Angular.json içinde script dizisi altında

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

Şimdi jQuery kullanmak için tek yapmanız gereken jQuery kullanmak istediğiniz herhangi bir bileşen aşağıdaki gibi almaktır.

Örneğin, kök bileşeninde jQuery içe aktarma ve kullanma

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');
}

yol yanlış kullanım./node_modules yerine ../node_modules
Vikas

4

Bir aptal olduğum için, çalışma koduna sahip olmanın iyi olacağını düşündüm.

Ayrıca, açısal iletki Angular2 yazım sürümleri jQuery ile ilgili sorunlar var $ , bu yüzden kabul edilen en iyi cevap bana temiz bir derleme vermiyor.

İşte çalışmam gereken adımlar:

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 içinde

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

Sadece yaz

declare var $:any;

tüm içe aktarma bölümlerinden sonra jQuery kullanabilir ve jQuery kitaplığını index.html sayfanıza ekleyebilirsiniz

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

benim için çalıştı


2


1) Bileşende DOM'ye erişmek için.

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'yi aşağıdaki şekilde ekleyebilirsiniz. 2) açısal2 yüklenmeden önce size jquery dosyasını index.html dosyasına ekleyin

      <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 aşağıdaki şekilde kullanabilirsiniz, İşte ben JQuery Ui tarih seçici kullanıyorum.

    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
         }
        });
    }
}

Bu iş benim için.


2

Jquery kurulumunu atlıyorum, çünkü bu nokta benimkinden önce oluşturulan tüm yazılarda belirtildi. Yani, zaten jquery yüklediniz. T bileşenini böyle içeri aktarma

import * as $ from 'jquery';

çalışır, ancak bunu bir hizmet oluşturarak yapmanın başka bir 'açısal' yolu vardır.

Adım no. 1: jquery.service.ts dosyası oluşturun .

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

Adım. Hayır. 2: hizmeti app.module.ts dosyasına kaydettirin

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

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

Adım no. 3: hizmeti bileşeninize my-super-duper.component.ts enjekte edin

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

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

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

Birisi her iki yöntemin de artılarını ve eksilerini açıklayabilirse çok minnettar olurum: hizmet olarak DI jquery, import * 'jquery'den $ $;


1

Bulduğum en etkili yol, setTimeout'u sayfa / bileşen yapıcısının içinde 0 zamanıyla kullanmaktır. Bu, Angular tüm alt bileşenleri yüklemeyi bitirdikten sonra jQuery'nin bir sonraki yürütme döngüsünde çalışmasına izin verin. Birkaç başka bileşen yöntemi kullanılabilir, ancak ben denedim tüm setTimeout içinde çalışırken en iyi çalışır.

export class HomePage {
    constructor() {
        setTimeout(() => {
            // run jQuery stuff here
        }, 0);
    }
}

3
Bunun ngOnInit()yerine kesinlikle kullanmalısınız
xordon

1
ngAfterViewInit ()
Niyaz

setTimeoutgerçekten *ngForrender bitirmek için birçok öğe varsa işe yaramaz .
claudchan

1

İşte benim için işe yarayan - webpack ile Angular 2

Beyan etmeyi denedim $Tip olarakany çalıştım, ancak herhangi bir JQuery modülünü kullanmaya çalıştığımda (örneğin) aldığım $(..).datepicker()bir işlev değil

Jquery benim vendor.ts dosyama dahil olduğundan ben sadece kullanarak benim bileşeni içine ithal

import * as $ from 'jquery';

Jquery eklentilerini (bootstrap-datetimepicker gibi) şimdi kullanabiliyorum


Uygulamanızın önyükleme işleminin 5 kat daha uzun süreceğini unutmayın.
Jake

@jake, bootstrap kitaplıklarını yüklemek için harcanan zaman nedeniyle mi?
raghav710

Hayır, jquery daha uzun sürer. bootstrap! == twitter bootstrap
jake

@ jake ayy! Sanırım jquery demek istedim. Not için teşekkürler
raghav710

@jake, bir uygulamanın tüm uygulama için jquery sunarak neden bir uygulamanın bootstrap için 5 kat daha uzun süreceğini açıklar mısın?
Marvel Moe

1

Ayrıca "InjectionToken" ile içe aktarmayı deneyebilirsiniz. Burada açıklandığı gibi: Angular / Typescript içinde jQuery'yi tür tanımı olmadan kullanma

Sadece jQuery global örneğini enjekte edebilir ve kullanabilirsiniz. Bunun için herhangi bir tür tanımına veya tipine ihtiyacınız olmayacaktır.

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 dosyasında doğru ayarlandığında:

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 { }

Bileşenlerinizde kullanmaya başlayabilirsiniz:

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

Resmi Kütüphane olarak Global Kütüphane Kurulumu

  1. Npm'den yükle:

    npm install jquery --save

  2. Komut dosyalarına gerekli komut dosyalarını ekleyin:

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

Çalıştırıyorsanız sunucuyu yeniden başlatın ve uygulamanızda çalışıyor olması gerekir.


Eğer tek bileşenli kullanıma içine kullanmak istiyorsanız import $ from 'jquery';sizin bileşenlerin içinde


1

Diğerleri zaten yayınlanmış. ama burada basit bir örnek veriyorum, böylece yeni gelenlere yardımcı olabilirim.

Adım-1: index.html dosya başvuru jquery cdn

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

Adım-2: Bir düğmeyi tıklayarak div göstermek veya div'ı gizlemek istediğimizi varsayalım:

 <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>

Adım-3: Aşağıdaki bileşen dosyasında içe aktarma bildirimi $ olarak feryat:

declare var $: any;

feryat gibi bir işlev oluşturmaktan daha fazlası:

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

En son Açısal ve JQuery ile çalışacaktır


0

İlk olarak, aşağıdaki gibi npm kullanarak jQuery yükleyin:

npm install jquery  save

İkinci olarak, Açısal CLI proje klasörünüzün kökündeki ./angular-cli.json dosyasına gidin ve komut dosyalarını bulun: [] özelliği ve jQuery yolunu aşağıdaki gibi ekleyin:

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

Şimdi, jQuery kullanmak için tek yapmanız gereken jQuery kullanmak istediğiniz herhangi bir bileşen içine onu almaktır.

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

Özellikle ikinci satırda tıklama üzerine div canlandırmak için jQuery kullanan aşağıdaki koda bir göz atın. Her şeyi jQuery'den $ olarak alıyoruz.

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 yükleyin

Terminal $ npm install jquery

(Bootstrap 4 için ...)

Terminal $ npm install popper.js

Terminal $ npm install bootstrap

Ardından importifadeyi şuraya ekleyin app.module.ts.

import 'jquery'

(Bootstrap 4 için ...)

import 'popper.js'
import 'bootstrap'

Artık ihtiyacınız olmayacak <SCRIPT> JavaScript'e başvurmak için etiketlere .

(Kullanmak istediğiniz herhangi bir CSS'ye hala başvurulmalıdır styles.css)

@import "~bootstrap/dist/css/bootstrap.min.css";

-1

Angular'ı kullandığınızda, jquery kitaplığını kullanmamaya çalışın. Açısal çerçeve için üretilen özellikleri ve kütüphaneleri kullanmayı deneyin. Find () , html () , en yakın () ve benzeri jquery işlevlerini kullanmak istiyorsanız , saf js kullanmanızı öneririm. örnek: querySelector () , innerHTML , parentElement ve benzeri ...

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.