`
KingwarLuo
  • 浏览: 12722 次
  • 性别: Icon_minigender_1
  • 来自: 厦门
社区版块
存档分类
最新评论

AngularJS与Jquery的区别

 
阅读更多

参考:http://www.jb51.net/article/60490.htm

 

数据绑定

这是到目前为止AngularJS最令人瞩目的特性了,在数据绑定方面它舍弃了对DOM的操作方式,而这一切都是由AngularJS来自动更新视图,你不必写操作dom的代码,在jQuery中,我们常常按照以下方式响应事件并修改视图:

$.ajax({
   url: '/myEndpoint.json',
   success: function ( data, status ) {
    $('ul#log').append('<li>Data Received!</li>');
   }
 });

 

 

相对于这样一个视图

< ul class="messages" id="log">
< /ul>

 

除了混杂的问题之外,我们还存在我之前提到的如何表明自己意图的问题。但是更为重要的是,我们必须人工手动去引用并更新这个DOM节点,如果我们想删除其中一条,那么必须以编程方式去操作那个DOM元素,那么在这种情况下我们怎么去测试DOM节点之外的逻辑呢,亦或者我们想改变展示方式呢?

以上代码显得凌乱又脆弱,但是在AngularJS中,我们可以这样做:

$http( '/myEndpoint.json' ).then( function ( response ) {
     $scope.log.push( { msg: 'Data Received!' } );
 });

 

我们的视图应该像下面这样

< ul class="messages">
     <li ng-repeat="entry in log">{{ entry.msg }}</li>
< /ul>

 
在那种情况下,我们的视图也可以这样

< div class="messages">
     <div class="alert" ng-repeat="entry in log">
         {{ entry.msg }}
     </div>
< /div>

 

现在我们不使用ul,而是使用Bootstrap的弹出框,但是我们不用修改controller中的代码,更为重要的是,不管是数据如何修改,视图层也会自动随之发生变化,非常简洁!

尽管我这里不会做演示,但是你需要知道数据绑定是双向的,你可以编辑数据通过添加指令<input ng-model="entry.msg" />,此外还有很多其他的令人兴奋的地方。

 

以测试驱动的开发

但是在AngularJS中我们可以关注分离点,所以我们可以做一些测试驱动的开发。例如,我们有一个directive用来说明在menu中我们的当前路径,我们可以在视图中这样声明:

 <a href="/hello" when-active>Hello</a>

 好了,现在我们可以写一个测试用来测试这个不存在的指令when-active了。

it( 'should add "active" when the route changes', inject(function() {
     var elm = $compile( '<a href="/hello" when-active>Hello</a>' )( $scope );
  
     $location.path('/not-matching');
     expect( elm.hasClass('active') ).toBeFalsey();
  
     $location.path( '/hello' );
     expect( elm.hasClass('active') ).toBeTruthy();
 }));

 我们直接run测试用例,你会发现是失败的,这时候需要创建这个指令,如下:

.directive( 'whenActive', function ( $location ) {
     return {
         scope: true,
         link: function ( scope, element, attrs ) {
             scope.$on( '$routeChangeSuccess', function () {
                 if ( $location.path() == element.attr( 'href' ) ) {
                     element.addClass( 'active' );
                 }
                 else {
                     element.removeClass( 'active' );
                 }
             });
         }
     };
 });

 从概念上讲,指令不是打包的jQuery

        某些指令仅仅是装饰我们的视图(例如ngClass),因此有时候直接操作dom是可以的,但是当一个指令类似于一个小物件并且拥有自己的模板,那么它应该当做一个分离的关注点,这就是说,它的模板需要和link中的执行逻辑以及其他controller函数分离开。

        AngularJS拥有一整套的工具可以是这种分离更简单,使用ngClass指令,我们可以动态地更新class,使用ngBind我们可以进行双向数据绑定,使用ngShow和ngHide 我们

可以采用编程的形式显示和隐藏一个元素,也包括我们自己写的很多指令。换句话说,我们可以不用Dom操作而完成所有工作,dom操作越少,指令越容易测试,越容易指定他们的style属性,就越容易在将来改变他们,那么他们就越容易复用和分发。

       我看过很多AngularJS新手使用指令封装一大串 jQuery代码,换句话说,既然我不能在controller里面进行dom操作,那么我可以将他放在指令中,虽然这相对于直接操作dom好很多,但是任然是错误的。

        看看我们在上面的记录,即使我们将其放在一个指令中,我们任然需要以Angular的方式去操作它,这种方式不执行dom操作!在很多时候dom操作是需要的,但是这种情况比你想的要少得多。当我们需要做dom操作的时候先问问自己这里是否必须这样做,这才是一种更好的方式。

 

分享到:
评论

相关推荐

    AngularJS封装jQuery Datepicker

    - **事件处理**:AngularJS 提供了自己的事件处理机制,但为了与jQuery Datepicker配合,我们可能需要监听jQuery事件,如`on('changeDate')`,并在事件触发时更新AngularJS模型。 - **配置和本地化**:Datepicker有...

    angularJS和Jquery

    标题"angularJS和Jquery"提到了两种JavaScript库——AngularJS和jQuery,它们在前端开发中都有着广泛的应用。AngularJS是Google维护的一个MVC(Model-View-Controller)框架,用于构建复杂的单页应用程序(SPA)。...

    AngularJS封装jQuery DateTimepicker

    总结起来,这篇博客会涵盖AngularJS指令的创建、jQuery与AngularJS的结合使用,以及如何封装jQuery DateTimepicker以适应AngularJS的数据绑定机制。对于那些在AngularJS项目中需要日期时间选择功能的开发者来说,这...

    AngularJS封装jQuery-File-Upload

    在实际开发中,将jQuery插件与AngularJS结合时,通常会遇到一些挑战,因为两者的工作方式有所不同。AngularJS的哲学是尽量避免直接操作DOM,而jQuery则依赖于DOM操作。因此,我们需要将jQuery-File-Upload的行为转换...

    easyui+jquery插件+angularJS

    标题中的“easyui+jquery插件+angularJS”揭示了这个压缩包可能包含的三个主要技术:EasyUI、jQuery插件以及AngularJS。这三种技术都是前端开发中的关键组件,分别对应于用户界面框架、JavaScript库和单页应用框架。...

    angularjs-jquery-video-uploader:AngularJS + JQuery File Upload项目,用于将视频上传到Wistia

    在这个项目中,它与 AngularJS 和 jQuery 一起工作,提供动态交互的视频上传功能。 **压缩包文件名称列表解析:** "angularjs-jquery-video-uploader-master" 通常代表这是项目源码的主分支(master)的压缩包。...

    angular+jquery+bootstrap后台模板

    在与AngularJS结合的后台模板中,jQuery可能用于处理一些Angular不擅长或者尚未涵盖的DOM操作,如复杂动画效果或与第三方库的集成,以增强用户界面的流畅性。 **Bootstrap**: Bootstrap是Twitter开源的一个前端框架...

    AngularJS的jQuery日期选择器UI-date.zip

    UI-date 是 AngularJS 一个指令,可以将 jQuery UI 日期选择器添加到您的表单元素。 标签:UIdate

    go-angularjs-jquery-bootstrap-boilerplate:Go + AngularJS + jQuery + Bootstrap 样板 Web 应用程序

    Go、AngularJS、jQuery 和 Bootstrap Boilerplate Go web 应用程序:目前使用 forked 支持加载编译资产。模板分隔符Go 模板默认使用{{和}} ,这与 AngularJS 语法不兼容。 此样板用[:和:]替换默认分隔符。资产资产是...

    用JQUERY模仿Angularjs的todoList(mvc)

    本教程将聚焦于如何使用jQuery来模仿AngularJS的TodoList功能,这是一个经典的MVC(Model-View-Controller)模式应用实例,让我们深入了解这两个库的不同之处以及如何在jQuery中实现类似的功能。 首先,AngularJS是...

    stickyNotes:PHP和AngularJS和jQuery中的即时贴

    这是Hai Zheng撰写的AngularJS&jQuery&PHP的ajax即时贴。 自述文件 下载到本地服务器。 确保data.txt和md5.txt可写。 通过浏览器访问stickyNotes.html,例如或 如果遇到任何问题,请记住打开开发人员工具进行...

    angularjs-bootstrap-jquery中文手册

    1. 双向数据绑定:AngularJS的一大亮点是能够自动同步模型与视图,任何一方的改变都会即时反映到另一方。这使得开发者无需手动操作DOM,降低了代码的复杂性。 2. 依赖注入:AngularJS的DI系统允许开发者轻松地在不同...

    ANGULARJS中使用JQUERY分页控件

    ANGULARJS与JQUERY分页控件的结合使用是前端开发中经常会遇到的一个实际问题。ANGULARJS作为一个数据绑定的前端框架,拥有强大的MVW(Model-View-Whatever)架构。而JQUERY则是一个功能强大的JavaScript库,能够简化...

    jquery操作angularjs对象

    文章最后用“中药好,西药快,中西结合”这一比喻来形象地描述了在现代Web开发中,传统JavaScript库(如jQuery)与现代框架(如AngularJS)的结合使用。通过文章的介绍,我们可以了解到,虽然混合使用jQuery和...

    疯狂前端开发讲义 jQuery AngularJS Bootstrap前端开发实战

    在前端开发领域,jQuery、AngularJS和Bootstrap是三个极为重要的技术框架,它们分别在不同的层面上解决了网页开发中的各种问题,极大地提高了开发效率和用户体验。接下来,我们将详细探讨这三个技术的核心概念、应用...

    疯狂前端开发讲义——jQuery+AngularJS+Bootstrap前端开发实战

    《疯狂前端开发讲义——jQuery+AngularJS+Bootstrap前端开发实战》是一本深入浅出的前端开发教程,它涵盖了三个核心的前端技术:jQuery、AngularJS和Bootstrap。这些技术在现代网页开发中扮演着至关重要的角色,使得...

    SPATemplate:带有 AngularJS、jQuery、HTML、CSS 的 SPA 基本文件模板

    使用过程中,需理解各技术间的协作机制,熟练运用AngularJS的特性,结合jQuery优化DOM操作,利用CSS实现美观的界面。对于大型项目,还可能涉及路由配置、模块化管理和单元测试等方面。总之,SPATemplate为开发者提供...

    Me-SIUE:我在SIUE的个人网站。 HTML,CSS AngularJS和jQuery

    【标题】"Me-SIUE:我在SIUE的个人网站" 涉及的主要技术是网页开发中的HTML、CSS、AngularJS和jQuery,这些都是构建现代交互式网站的关键元素。 【HTML】(HyperText Markup Language)是网页内容的基础,用于描述...

Global site tag (gtag.js) - Google Analytics