参考: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配合,我们可能需要监听jQuery事件,如`on('changeDate')`,并在事件触发时更新AngularJS模型。 - **配置和本地化**:Datepicker有...
标题"angularJS和Jquery"提到了两种JavaScript库——AngularJS和jQuery,它们在前端开发中都有着广泛的应用。AngularJS是Google维护的一个MVC(Model-View-Controller)框架,用于构建复杂的单页应用程序(SPA)。...
总结起来,这篇博客会涵盖AngularJS指令的创建、jQuery与AngularJS的结合使用,以及如何封装jQuery DateTimepicker以适应AngularJS的数据绑定机制。对于那些在AngularJS项目中需要日期时间选择功能的开发者来说,这...
在实际开发中,将jQuery插件与AngularJS结合时,通常会遇到一些挑战,因为两者的工作方式有所不同。AngularJS的哲学是尽量避免直接操作DOM,而jQuery则依赖于DOM操作。因此,我们需要将jQuery-File-Upload的行为转换...
标题中的“easyui+jquery插件+angularJS”揭示了这个压缩包可能包含的三个主要技术:EasyUI、jQuery插件以及AngularJS。这三种技术都是前端开发中的关键组件,分别对应于用户界面框架、JavaScript库和单页应用框架。...
在这个项目中,它与 AngularJS 和 jQuery 一起工作,提供动态交互的视频上传功能。 **压缩包文件名称列表解析:** "angularjs-jquery-video-uploader-master" 通常代表这是项目源码的主分支(master)的压缩包。...
在与AngularJS结合的后台模板中,jQuery可能用于处理一些Angular不擅长或者尚未涵盖的DOM操作,如复杂动画效果或与第三方库的集成,以增强用户界面的流畅性。 **Bootstrap**: Bootstrap是Twitter开源的一个前端框架...
UI-date 是 AngularJS 一个指令,可以将 jQuery UI 日期选择器添加到您的表单元素。 标签:UIdate
Go、AngularJS、jQuery 和 Bootstrap Boilerplate Go web 应用程序:目前使用 forked 支持加载编译资产。模板分隔符Go 模板默认使用{{和}} ,这与 AngularJS 语法不兼容。 此样板用[:和:]替换默认分隔符。资产资产是...
本教程将聚焦于如何使用jQuery来模仿AngularJS的TodoList功能,这是一个经典的MVC(Model-View-Controller)模式应用实例,让我们深入了解这两个库的不同之处以及如何在jQuery中实现类似的功能。 首先,AngularJS是...
这是Hai Zheng撰写的AngularJS&jQuery&PHP的ajax即时贴。 自述文件 下载到本地服务器。 确保data.txt和md5.txt可写。 通过浏览器访问stickyNotes.html,例如或 如果遇到任何问题,请记住打开开发人员工具进行...
1. 双向数据绑定:AngularJS的一大亮点是能够自动同步模型与视图,任何一方的改变都会即时反映到另一方。这使得开发者无需手动操作DOM,降低了代码的复杂性。 2. 依赖注入:AngularJS的DI系统允许开发者轻松地在不同...
ANGULARJS与JQUERY分页控件的结合使用是前端开发中经常会遇到的一个实际问题。ANGULARJS作为一个数据绑定的前端框架,拥有强大的MVW(Model-View-Whatever)架构。而JQUERY则是一个功能强大的JavaScript库,能够简化...
文章最后用“中药好,西药快,中西结合”这一比喻来形象地描述了在现代Web开发中,传统JavaScript库(如jQuery)与现代框架(如AngularJS)的结合使用。通过文章的介绍,我们可以了解到,虽然混合使用jQuery和...
在前端开发领域,jQuery、AngularJS和Bootstrap是三个极为重要的技术框架,它们分别在不同的层面上解决了网页开发中的各种问题,极大地提高了开发效率和用户体验。接下来,我们将详细探讨这三个技术的核心概念、应用...
《疯狂前端开发讲义——jQuery+AngularJS+Bootstrap前端开发实战》是一本深入浅出的前端开发教程,它涵盖了三个核心的前端技术:jQuery、AngularJS和Bootstrap。这些技术在现代网页开发中扮演着至关重要的角色,使得...
使用过程中,需理解各技术间的协作机制,熟练运用AngularJS的特性,结合jQuery优化DOM操作,利用CSS实现美观的界面。对于大型项目,还可能涉及路由配置、模块化管理和单元测试等方面。总之,SPATemplate为开发者提供...
【标题】"Me-SIUE:我在SIUE的个人网站" 涉及的主要技术是网页开发中的HTML、CSS、AngularJS和jQuery,这些都是构建现代交互式网站的关键元素。 【HTML】(HyperText Markup Language)是网页内容的基础,用于描述...