【问题标题】:How to include jQuery in ionic 2 Angular app如何在 ionic 2 Angular 应用程序中包含 jQuery
【发布时间】:2017-09-01 16:15:39
【问题描述】:

我正在创建一个 ionic 2 应用程序。我是一个新的 Angular 2 开发人员,如果我错过了一些东西,很抱歉。我想在页面组件中包含 jQuery 和其他 js 文件。

我用了这个方法:

import { Component } from '@angular/core';
import '../../assets/js/jquery-2.1.1.js';
import '../../assets/js/prog-bar.js';
import '../../assets/js/myApp.js';
import { NavController } from 'ionic-angular';

好的,它加载了文件,但它给了我错误

未捕获的引用错误:$ 未定义。

所以我尝试包含 jquery 库:

npm install @types/jquery --save-dev

但我不知道下一步该做什么。 如何在我的应用程序中以一种好的方式使用 Jquery lib, 请不要告诉我将脚本标签添加到 index.html 页面,因为每次我重新运行应用程序时它都会被删除。

【问题讨论】:

标签: jquery angular typescript ionic2


【解决方案1】:

可以通过以下方式完成。

  1. Optimum - 将其导入您的组件文件中。

    • 安装 jQuery 及其类型 - npm install jquery --save npm install @types/jquery --save-dev

    • 使用以下任何一项将其导入您的*.component.ts 顶部 -

      • import * as $ from 'jquery';
      • 或 - import 'jquery'; 并声明这两个(作为全局变量) -
        • declare let $:any;
        • declare let jQuery:any;
  2. 不是最佳选择 - 您还可以在根项目的 src/ 文件夹下的 head 中包含 jQuery CDN link

此外,在 Ionic 中,webpack.config.js 文件位于 node_modules 文件夹下,在执行 npm install 后将被替换。

【讨论】:

  • 但是我该如何处理这个@SujitKumarSingh,我仍然得到Runtime Error jQuery is not defined。我也不明白declare let $:anydeclare let jQuery:any 的意思。那么在 ts 文件中我在什么黑色下定义呢?
  • 通过第一种方法import * as $ from 'jquery',我从jQuery libraru 导入everything$。但这可能并不总是有用,因为很少有库使用jQuery 而不是$。因此我也提到了第二个选项,它导入jQuery,然后声明其中使用的变量。 import 'jquery'declare let $:any;declare let jQuery:any 将在 3 行代码中依次出现(按顺序)。通过这样做,您基本上定义了 any 数据类型的 2 个新变量 $jQuery
  • 如果您要添加/导入外部jQuery 插件,那么point 1 将不起作用。它将使Error: jQuery is not defined 指向导入的jQuery plugin file。为此,我在hereIonic forum 中提出了类似的问题。对于这种情况,我提到在point 2 中的index.html 的标题下包含jQuery CDN link,这是角度应用程序的主要模板。
【解决方案2】:
import $ from 'jquery';

如果你这样做了,上面应该可以工作:

System.config({
defaultJSExtensions: true,
paths: {
    // paths serve as alias
    'npm:': 'node_modules/'
},
map: {
    'app':  'app',
    jquery: 'http://ajax.googleapis.com/ajax/libs/jquery/2.2.2/jquery.min.js',
    material: 'npm:material-design-lite/dist/material.min.js',

    // angular bundles
    '@angular/core': 'npm:@angular/core/bundles/core.umd.js',
    ....
},
packages: {
    app: { main: 'main', format: 'register', defaultExtension: 'js' },
    'rxjs': { defaultExtension: 'js' }
},
});

另外不要忘记你应该有一个指向你的 jquery 输入文件的 typings.json。

请注意,如果您没有找到 system.config.js 文件,请查找要更改的 webpack 文件。如果你找到了,webpack.config.js 只需将其添加到其中:

plugins: [ new webpack.ProvidePlugin({ jQuery: 'jquery', $: 'jquery', jquery: 'jquery' }) ]

【讨论】:

  • 您没有systemjs.config.js 文件吗?如果你没有看到它,那么我认为 Ionic 可能已经迁移到 webpack
  • 不,我不只是像 ionic 2 文档所说的那样创建了一个应用程序,我没有包含任何文件。
  • 很抱歉我是个白痴:(。但我找到的不仅仅是 webpack 文件。所以请你提供完整路径或至少提供文件扩展名
猜你喜欢
  • 2018-07-31
  • 1970-01-01
  • 2017-10-20
  • 2016-12-05
  • 2016-11-04
  • 2016-07-31
  • 2018-02-12
  • 2016-10-07
  • 2017-07-05
相关资源
最近更新 更多