J'utilise le composant select2 basé sur jQuery dans mon projet AngularJS. J'ai eu un problème similaire en tant que gars ici: https://github.com/fronteed/icheck/issues/322 , et l'ai résolu en utilisant des conseils à partir de là. Pour être précis, j'ai reçu une erreur TypeError: $(...).select2 is not a function
lorsque je n'utilisais pas ce conseil.
c'est-à-dire que j'ai ajouté les lignes suivantes à la configuration de Webpack dans @angular/cli/models/webpack-configs/common.js
.
plugins: [
new webpack.ProvidePlugin({
$: "jquery",
jQuery: "jquery"
})
]
Est-ce la meilleure façon d'activer jQuery en angulaire/cli?
Je ne pense pas que faire la même chose que dans https://github.com/angular/angular-cli/wiki/stories-global-lib est une manière correcte, car
a) bundles webpack jQuery sans besoin de le spécifier dans les scripts
b) il génère toujours une erreur TypeError: $(...).select2 is not a function
lorsque vous l'incluez comme décrit dans l'article.
J'ai pu réaliser ce dont j'avais besoin en exposant Webpack. Utilisez la commande ng eject
.
Tout d'abord, installez jQuery en utilisant npm install -S jquery
(Et j'ai également installé npm install -S select2
, Car j'en avais également besoin).
Ensuite, assurez-vous d'avoir sauvegardé votre fichier package.json, car pendant ng eject
Angular CLI essaiera d'ajouter ses dépendances Webpack à l'intérieur de votre package.json.
Après que ng eject
Ait fini de fonctionner, à l'intérieur de webpack.config.js
J'ai ajouté
// ... Inside require/imports part
const ProvidePlugin = require('webpack/lib/ProvidePlugin');
// ... Inside `plugins` section of Webpack configuration
new ProvidePlugin({
$: "jquery",
jQuery: "jquery"
})
Et maintenant, select2 ajoute correctement la fonction $(...).select2
à l'objet jQuery global!
Pour utiliser jQuery avec select2 dans votre fichier .ts, vous pouvez ajouter les lignes suivantes au début de ce fichier:
import "select2";
import "jquery";
declare var $: any;
// Somewhere deep within component
// ...
$(this.input.nativeElement)
.select2(config)
.on("change select2:select select2:unselect", (e: any) => this.onSelect2ElementChange(e));
// ...
j'utilise jQuery dans mon projet comme suit.
Installer jQuery
npm install --save jquery
Installez la définition de type jQuery pour la vérification de type.
npm install --save-dev @types/jquery
Ajoutez le refenece du fichier jquery dans le tableau "scripts" à l'intérieur du fichier angular-cli.json.
"scripts": [
"../node_modules/jquery/dist/jquery.min.js"
]
importez jquery dans n'importe quel composant que vous souhaitez utiliser.
import * as jQuery from 'jquery';
c'est ça. de la même manière, vous pouvez également utiliser d'autres bibliothèques comme moment.js
, d3.js
etc.
Vous pouvez également utiliser expose-loader . L'exemple ci-dessous est écrit pour le webpack 2,
{ test: /[\/]jquery\.js$/,
use: [
{ loader: 'expose-loader', query: 'jQuery' },
{ loader: 'expose-loader', query: '$' }
]
},
L'ajouter de la même manière que le lien que vous avez fourni garantira qu'il est chargé. Sinon, essayez ci-dessous dans votre composant.
npm install jquery
Ensuite, utilisez dans votre composant
declare var $:any;
var $ = require('jquery');