我们应该在AngularJS中使用jQuery吗?
我们的网站目前正在使用jQuery库,每月流量约为100万。 我们希望包含以API为中心的方法,因此决定转向Javascript MVC并选择angularJS。
现在我的问题是,我应该在Angular的顶部使用jQuery,以便我需要重写最小的DOM操作代码,或者我应该以Angular方式重写所有内容? 我们正在使用像plupload,jQuery UI这样的jQuery插件。 在网站上等。 请建议最佳的迁移方式(页面加载时间也很重要)。
如果我有jQuery背景,已经通过“Thinking in AngularJS”了吗? 但没有得到一个明确的答案
在进行迁移之前,您需要考虑AngularJS的好处。
- 它通过仅在范围中存储变量来提供双向绑定。
- 与JQuery相比,我们需要编写代码。
- 以模块化方式实现(通过创建
angular.module
) - 将大部分代码从Javascript转移到HTML,看起来代码更清晰。
- Singleton模板器用于存储数据并在多个控制器或服务之间共享。
- 它使用较小版本的jQuery(称为JQlite)构建,它具有大部分基本function,但是你想在AngularJS中使用JQuery,那么只需要在其中添加jQuery引用就可以使用它,之后JQLitefunction获得转换成JQuery。
你不应该在AngularJS的顶部使用jQuery,因为如果我们使用JQuery进行任何角度DOM操作或范围变量操作,AngularJS摘要周期将不会运行。
当您将jQuery组件迁移到AngularJS时,您需要遵循以下内容
- 您首先需要搜索
angular-ui-bootstrap
站点,因为它们已经覆盖了已经转换为angular的大部分UI组件。 - 我相信你不会找到每个插件的Angular版本,因为你应该将该插件包装到指令中。 这将为您提供控制器,而不是任何指令所在的DOM元素。( 此处为Datepicker使用指令的示例 )
- 不要尝试从创建摘要周期的外部角度上下文绑定事件,这将导致影响UI上的绑定更新。
- 确保在进行任何应该使用
$http
而不是使用$.ajax
- 你可以在jquery代码中找到很多可以用ng-class指令替换的地方,比如你只是添加和删除类,或者根据任何条件显示一些元素,这样就可以替换那种jquery代码通过使用
ng-class
指令 - 查找只删除DOM或添加可以通过
ng-if
指令轻松替换的DOM的地方,或者只使用ng-show
/ng-hide
来完成show hide of element - 还可以在UI中找到这样一个部分,在该UI中使用for循环创建相同的DOM,可以将其转换为angular native directive
ng-repeat
- 如果您有任何需要显示和隐藏多个元素的情况,那么部分代码将使用
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
'); }); } }]);