我们应该在AngularJS中使用jQuery吗?

我们的网站目前正在使用jQuery库,每月流量约为100万。 我们希望包含以API为中心的方法,因此决定转向Javascript MVC并选择angularJS。

现在我的问题是,我应该在Angular的顶部使用jQuery,以便我需要重写最小的DOM操作代码,或者我应该以Angular方式重写所有内容? 我们正在使用像plupload,jQuery UI这样的jQuery插件。 在网站上等。 请建议最佳的迁移方式(页面加载时间也很重要)。

如果我有jQuery背景,已经通过“Thinking in AngularJS”了吗? 但没有得到一个明确的答案

在进行迁移之前,您需要考虑AngularJS的好处。

  1. 它通过仅在范围中存储变量来提供双向绑定。
  2. 与JQuery相比,我们需要编写代码。
  3. 以模块化方式实现(通过创建angular.module
  4. 将大部分代码从Javascript转移到HTML,看起来代码更清晰。
  5. Singleton模板器用于存储数据并在多个控制器或服务之间共享。
  6. 它使用较小版本的jQuery(称为JQlite)构建,它具有大部分基本function,但是你想在AngularJS中使用JQuery,那么只需要在其中添加jQuery引用就可以使用它,之后JQLitefunction获得转换成JQuery。

你不应该在AngularJS的顶部使用jQuery,因为如果我们使用JQuery进行任何角度DOM操作或范围变量操作,AngularJS摘要周期将不会运行。

当您将jQuery组件迁移到AngularJS时,您需要遵循以下内容

  1. 您首先需要搜索angular-ui-bootstrap站点,因为它们已经覆盖了已经转换为angular的大部分UI组件。
  2. 我相信你不会找到每个插件的Angular版本,因为你应该将该插件包装到指令中。 这将为您提供控制器,而不是任何指令所在的DOM元素。( 此处为Datepicker使用指令的示例
  3. 不要尝试从创建摘要周期的外部角度上下文绑定事件,这将导致影响UI上的绑定更新。
  4. 确保在进行任何应该使用$http而不是使用$.ajax
  5. 你可以在jquery代码中找到很多可以用ng-class指令替换的地方,比如你只是添加和删除类,或者根据任何条件显示一些元素,这样就可以替换那种jquery代码通过使用ng-class指令
  6. 查找只删除DOM或添加可以通过ng-if指令轻松替换的DOM的地方,或者只使用ng-show / ng-hide来完成show hide of element
  7. 还可以在UI中找到这样一个部分,在该UI中使用for循环创建相同的DOM,可以将其转换为angular native directive ng-repeat
  8. 如果您有任何需要显示和隐藏多个元素的情况,那么部分代码将使用ng-switch指令实现

使用Angular构建控制器和API客户端,然后在时间允许的情况下尽可能多地移动DOM操作并尽可能地移动角度指令。 然后等待Angular 2被释放并重新做一遍。

这是接近它的好方法。 如果你想在AngularJS和这些指令的链接部分中混合jQuery和Angular .. write指令,你可以包含用于DOM操作的jQuery。

请记住,AngularJS使用jQuery lite,因此jQuery已经构建了很多内容。

例如,您可以在角度应用程序中的任何位置使用角度为jQuery lite:

 angular.element('.class').append('

foo

');

并且在指令链接函数内部,

 angular.module('TestModule') .directive('jqueryTestDirective', ['$timeout', function($timeout) { return { restrict: 'E', link : function (scope, element) { $timeout(function(){ element.append('

foo

'); }); } }]);