Angular4 找不到 Jquery-UI 函数

Posted

技术标签:

【中文标题】Angular4 找不到 Jquery-UI 函数【英文标题】:Angular4 can't find Jquery-UI functions 【发布时间】:2018-01-12 17:27:10 【问题描述】:

我已经安装了 Jquery 和 Jquery-ui

npm install --save jquery jquery-ui

文件位于 node_modules 目录中。 我有一个声明 Jquery 的组件

declare var $: JQueryStatic;

我的 jquery 函数可以正常工作,但 jquery-ui 函数不能。

$('some-div').dropdown(); // works
$('window').draggable(); // draggable is not recognized as a function

所以,显然我对 jquery-ui 的包含是不正确的。我尝试在我的 .angular-cli.json 页面中包含一堆不同的东西,但没有成功。

我在 .angular-cli 文件中尝试过的事情:

...
"scripts": [
    "../node_modules/jquery/dist/jquery.min.js",
    "../node_modules/jquery-ui/ui/widgets/draggable.js",
    "../node_modules/jquery-ui/ui/draggable.js",
]

我尝试直接导入到组件中,但这给定义 $ui 带来了问题。我也遇到了定义未定义的错误。

我看过npm jquery-ui和Jquery-ui Upgrade guides

任何想法我哪里出错了?

【问题讨论】:

【参考方案1】:

在angular-cli.json中定义jquery-ui(并避免在index.html中添加)的解决方案是:

1 : 导入 jquery-ui-dist

    npm install jquery jquery-ui-dist

2:在 angular-cli.json 中添加脚本

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

来源: https://***.com/a/38795318

【讨论】:

【参考方案2】:

圣烟!这个很麻烦,但经过几天的尝试,我想通了。

所以,那里有很多部分答案,但这应该是完整的。 从我所看到的情况来看,您不能在 angular-cli 和索引中包含 jquery-ui。插件包含将被覆盖,并且作为全局的 jquery 将未定义。 我无法通过仅使用 angular-cli.json 使其工作,但我确实通过 only 使用索引包含使其工作。

这里是只为 jquery/jquery-ui 使用索引脚本包含需要做的事情。

1:卸载 jquery 和 jquery-ui 并将其从 package.json 中删除

npm uninstall --save jquery jquery-ui

2:删除node_modules文件夹

3:删除 angular-cli.json 文件中对 jquery 或 jquery-ui 的所有引用

4:重建 node_modules 文件夹(仔细检查 jquery-ui 是否不存在,但只要 angular-cli.json 不包含它,这并不重要。

npm install

5:在索引文件中包含 jquery,然后是 jquery-ui。我用的是 2.2.4,因为我还不信任 3。

<script src="https://code.jquery.com/jquery-2.2.4.js" integrity="sha256-iT6Q9iMJYuQiMWNd9lDyBUStIq/8PuOW33aOqmvFpqI=" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.12.1/jquery-ui.min.js"></script>

6:你想在任何组件中使用 jquery 或 jquery 插件注入 $

declare var $: any;

$('draggable').draggable(); // WORKS!

【讨论】:

我在 .ts 文件中的 .html 文件中的 script 标签中究竟应该放在哪里? @DanChase 在你要访问jquery的组件的.ts文件中。 它可以工作,但它会抛出一个错误 "$" not found。这将在稍后的部署过程中导致构建错误。【参考方案3】:

请像这样将 jQuery ui 导入 index.html

<script src="https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.12.1/jquery-ui.min.js"></script>

像这样在你的组件中去掉 $

声明 var $: any;

【讨论】:

有没有办法将它包含在 .angular-cli.json 文件中而不是网络导入?应用程序也需要离线工作。 嗨,克里斯,您可以使用 bower。像这样: bower install jquery-ui 然后你可以将它导入到 index.html 和 angular.cli.json 中。 我没有凉亭。我正在使用 npm。我 npm 安装了 jquery-ui。我需要知道如何正确地将它包含在 .angular-cli 文件中,以及如何在我的脚本中使用它,如上面的示例。当我直接包含文件时,仍然无法识别可拖动功能的错误。 嗨,克里斯,您是否在特定组件中导入了 jquery 和 jquery ui?像这个 import var $: any; // 导入 jquery import 'jquery-ui'; 你能给我看一个正确导入Jquery-ui的例子吗

以上是关于Angular4 找不到 Jquery-UI 函数的主要内容,如果未能解决你的问题,请参考以下文章

Rails 服务器告诉我 --- 找不到类型为 'application/javascript' 的文件 'jquery-ui/datepicker'

[Ruby on Rails] 找不到类型为“application/javascript”的文件“jquery-ui/autocomplete”

升级到 Angular4 后找不到名称“require”

在打包的电子应用程序中找不到图像资产 - angular4 和 webpack

找不到Angular 4本地工作区文件('angular.json')

Angular 4模板“找不到管道”