【问题标题】:Angular: $ is not defined角度:$ 未定义
【发布时间】:2019-10-27 12:07:01
【问题描述】:

我在 Angular 中使用 jQuery 和 jquery-ui 时遇到问题。

我创建了一个函数,但是执行时出现错误:

$ 未定义。

我在这里留下 stackblitz 链接,看看我是否与进口商谈过,或者我是否需要其他东西。

Stackblitz

【问题讨论】:

标签: javascript angular typescript


【解决方案1】:

你不需要jquery 来做任何你想做的事情。 Angular 开箱即用。

您可以使用Angular's Event Binding将点击事件绑定到html元素:

<a href="javascript:void(0)" (click)="#proImage.click()">Upload Image</a>
<input type="file" #proImage name="pro-image" style="display: none;" (change)="fileChanged(#proImage.files)" class="form-control" multiple>

然后在你的组件中实现fileChanged(files: FileList)

另外,请不要在 Angular 之外操作 DOM。不要使用 JQuery 在 DOM 中添加或删除元素。您很可能会想要使用 Angular 的 attribute bindingngFor or ngIf directives。如果这些都不适合你使用 Angular 的Renderer2

在 99.99% 的情况下,您不想使用 JQuery。请阅读 Angular 文档,其中大部分内容都有详细的示例和教程。

【讨论】:

  • 我选择了 JavaScript,因为我理解得更好。在角度无法获得预期的结果
  • 我知道您选择 jQuery 是因为您熟悉它。然而,像这样使用它会让你远离 Angular 提供的许多开箱即用的重要功能,最重要的是你会失去很多 jQuery 不提供的安全保护。如果您花更多时间尝试了解 Angular,我保证您会意识到其中的好处。 :)
  • 你认为我可以选择几个图像并将它们正确放入框中,而无需 javascript?
  • 如果没有 JQuery,绝对可以。你肯定会写一些 Typescript,但这将是 Angular 的方式。
  • 我已经设法完成了这个功能,但是我无法在各种框中插入各种图像......你能帮我吗?
【解决方案2】:

如果你在 Angular 中使用 jquery,通常你会误用 Angular,或者没有充分利用它的潜力。 Omar 的上一个答案对其进行了广泛的解释。

但是,如果这是一些遗留代码,并且您立即需要它,则应将 jquery 添加到 angular.json 文件中的“脚本”中。

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

接下来,您想以不同的方式从 hello.component 导入它。

import $ from "jquery";

声明没有必要:

declare var $: any;

Final code.

【讨论】:

  • 我选择了 JavaScript,因为我理解得更好。在角度无法获得预期的结果
  • 我测试了你的版本,通过点击按钮我得到它,即使 $ 没有声明
  • 好的,我明白了。我的版本正在解决添加 jquery 的问题,您描述的问题是滥用 Angular。您的 btn 单击方式是非 Angular 方法,并且 HelloComponent 无法正常工作。尝试我添加的相同链接,并查看 AppComponent 和按钮单击。但是,这必须以 Angular 的方式重新创建,否则您将面临一个又一个问题。如果您可能需要有关此问题的说明,请创建另一个包含应用说明的问题,以便我们帮助您确定正确的结构。
  • 然后我将创建一个新问题,感谢您的帮助!
猜你喜欢
  • 2014-03-07
  • 2021-04-20
  • 2015-05-22
  • 2016-01-07
  • 1970-01-01
  • 1970-01-01
  • 2018-12-03
  • 2017-02-08
  • 2018-11-10
相关资源
最近更新 更多