angularJS之站在jQuery的肩膀上

jQuery:用更少的代码,实现更强悍的功能

托互联网日新月异发展的福,浏览器变成了人们接入互联网的入口,而JavaScript 这个曾经的小语种,终于成功地站到了舞台的中央,唤起了开发者的兴趣。

浏览器里原生的JavaScript有点像汇编语言,不同的浏览器就像不同的CPU架构, 汇编语言各有千秋,这让前端开发者很恼火。聪明人很快发现了这个痛点,于是, 抹平浏览器差异的jQuery库出现了。

jQuery由一小撮对浏览器极其熟稔的极客负责抹平不同浏览器的差异,其他开发 者只需要基于jQuery进行开发,可以更好地关注业务实现,而不是把时间花在 适配不同的浏览器上。

这样的分工符合经济学原理,开启了一个不可忽视的jQuery时代。

满眼的全是DOM

jQuery使得开发无刷新动态页面(AJAX)或者单页应用(SAP)变得 相当简单。

标准的HTML页面是静态的,被浏览器渲染后就产生了一个DOM树:

jQuery让静态的文档动起来,通过提供一系列的选择符,jQuery使开发者能够 极其方便地选中一组DOM节点,对其进行操作。

这就是jQuery的开发范式。jQuery没有引入什么新的概念,只是朴素地,让你能够更简单 地、低成本地操作DOM:

  1. 用选择符选定一组DOM节点
  2. 操作选中的DOM节点,比如:修改文本、改变属性、挂接事件监听函数、变换DOM等等。
  3. 基本不用考虑跨浏览器的兼容性

jQuery的API符合大多数开发者的预期,因此,很容易上手。

用jQuery实现一个小时钟

示例演示:http://www.hubwiz.com/course/54f3ba65e564e50cfccbad4b/

我们试着用jQuery实现一个简单的时钟页面,实现思路很简单:

  • 引入jquery库

jquery库将创建一个全局对象:$。开发者需要的API都挂接在这个对象上。 它其实是一个类工厂,负责将指定的DOM对象转化为jquery对象。

  • 在DOM文档就绪后,启动一个定时器

使用$(document).ready()可以监听DOM文档就绪事件,通常简写成$(...)。

  • 在定时器里更新div#clock的文本

"div#clock"是一个选择符,使用这个选择符,jquery库可以找到那个 特定的DOM对象,并将其转化为jQuery对象。

jquery封装后的DOM对象有一堆的方法供你调用,我们使用text()方法更新其文本。

Query缺失的环节

jQuery有点像C语言,威力很大,不过要弄出点像样的前端界面,还得花不少功夫 处理琐碎的事情。

还能再简单些吗?Misko Hevery认为在某些应用场景下可以。于是,AngularJS诞生了:

AngularJS引入了三个主要的概念,期望让前端开发更系统化一些:

  1. 声明式界面开发
  2. 双向数据绑定
  3. 使用依赖注入解耦

很多人在初次接触AngularJS时,都有些吃惊,因为它把前端开发搞的突然严肃起来 了。考虑到Misko曾经是一个Java程序员,这一切就好理解了。

Java程序员擅长引入复杂的架构来解决简单的问题,对吧?

库 vs. 框架

和jQuery不同,AngularJS是一个框架。

jQuery是一个库,库总是被动的,就像工具,应用的开发逻辑是你的,在 某一点上需要用一下工具,就用好了。

框架则非常不同,这意味着AngularJS为应用已经搭起了一个架子,约定了 一些组成部分,并且实现了这些部分的拼装运行。换句话说, 应用的开发逻辑是AngularJS的,你得跟着它走。

所以,AngularJS难学一些,因为它有一个架子在那,你不了解这个架子, 基本没法下手。

jqLite:向jQuery致敬

在DOM操作方面,没有人比jQuery做的更好。AngularJS以一种特殊的方式 向jQuery表达了敬意:内置精简版的jQuery - jqLite。

和jQuery一样,jqLite兼容多个浏览器。

jqLite以angular.element接口提供出来,兼容jQuery API的一个子集。 在AngularJS的所有API中的element对象,都不是纯粹的DOM对象,而是经过jqLite 封装过的。

  • 选择符的问题

从开发者的角度,jqLite最明显的精简是不支持选择符。你只能向 angular.element传入一个DOM对象。看起来AngularJS将这部分功能让位给浏览器 原生的支持了,我们可以先使用浏览器的querySelector获得一个DOM对象:

  1. var tpl = document.querySelector(‘#clock‘);
  2. angular.element(tpl).text(...);
  • jQuery库的兼容性

如果某种原因你不愿意使用jqLite,也可以在AngularJS之前引入jQuery库。 AngularJS自动地将jqLite升级成jQuery,angular.element等同于 $ 。 这样又可以使用熟悉的选择符了。

  • 扩展的方法

jqLite包括一些额外的方法以适应AngularJS框架:

  • controller(name) - 获得元素对应的控制器对象
  • injector() - 获得元素对应的注入器对象
  • scope() - 获得元素对应的作用域对象
  • isolateScope() - 获得元素对应的隔离作用域对象,如果有的话。
  • inheritedData() - 和data()一样,但如果当前元素没有指定的数据,会向上级 节点继续找。
  • 扩展的事件

jqLite还提供一个$destroy事件,当DOM对象被从DOM树删除时,AngularJS将触发 这个事件,以便指令进行一些善后清理工作。

参考资料:http://www.hubwiz.com/course/54f3ba65e564e50cfccbad4b/

时间: 2024-10-10 20:18:37

angularJS之站在jQuery的肩膀上的相关文章

站在巨人的肩膀上,C++开源库大全

程序员要站在巨人的肩膀上,C++拥有丰富的开源库,这里包括:标准库.Web应用框架.人工智能.数据库.图片处理.机器学习.日志.代码分析等. 标准库 C++ Standard Library:是一系列类和函数的集合,使用核心语言编写,也是C++ISO自身标准的一部分. Standard Template Library:标准模板库 C POSIX library : POSIX系统的C标准库规范 ISO C++ Standards Committee :C++标准委员会 框架 C++通用框架和库

站在巨人的肩膀上学习Android开发

我们知道,一开始最好的学习方法是模仿,尤其是模仿巨人.那说到Android开发的模仿自然就是分析并研究主流程序的布局.实现方法,进而提升自己的技术. 第一招----逆向工程 要分析"巨人"们的软件,自然免不了逆向工程,即将APK程序转化为我们可以看的懂得源码.这个google官方已经帮我们做好了工具,apktool就是一款很好的逆向工具. 下载地址为:http://pan.baidu.com/s/1kTqRhaR 我们以分析微信为例来说明这个工具的使用: 你只需执行如下命令,即完成了反

站在巨人的肩膀上才能看得更加远[Amo]

本来只是路过,写详细一点.我看楼主浮躁得不得了.现在什么都不要做了,先去看几遍<不要做浮躁的嵌入式工程师>这篇文章,想清楚了,再动手吧.我做了个实例,不用ST的库来点LED,解答你的问题我的 KeilMDK 3.5我的STM32板子奋斗版是 ,IC 是 STM32F103VET6调试工具 JLINK V8LED 接在 PB5 ,高电平点亮既然楼主说一定懂C语言了,那么对于下面我的问题,不查百度,完全靠自己,懂多少?然后查了百度之后又能懂多少?(一)新建 keil 工程,IC选择 ST 公司的

站在巨人的肩膀上——人事项目数据导出word

最近在做人事项目中的,数据导出word,具体的说就是从web客户端页面获取信息,添加到信函模板中,再导出为word文档.总结一下,学会了两种方法,1.通过将word模板转换为html文件,输出word.2.利用第三方组件Aspose.Words操作word模板,输出word. 一.通过将word模板转换为html文件,输出word 1.制作word模板,在word文档中要添加内容的地方输入占位符. 2.把word模板另存为html文件. 文件-另存为-网页htm文件. 3前台代码 <asp:Bu

站在巨人的肩膀上,谈 app 的创新性

这段时间做了.看了.听了,也想了很多,我们的成功始终是站在巨人的肩膀上的,在学习了很多工业界大牛的经验之谈之后,我经过认真的思考,特别想整理这样一篇文章,希望与许多有梦想的 IT 小伙伴儿们共享.共勉!如果说的不对的地方,欢迎大家在下面留言讨论,虚心学习. 随着移动设备的普遍和相关技术的成熟发展,我们都希望自己可以开发一个好用的应用,不管是公益性的还是旨在运营推广的app,既然练手何不做的有声有色.如果你不是在资源丰富的平台下,而是自己组队开发一个app,并向体现自己的竞争力,能够脱颖而出,那么

小游戏“跳一跳”——站在巨人的肩膀上,用技术为自己助力

在更新最新版微信之后,聊天列表下拉会出现一个崭新的模块,其中就有新推出的"跳一跳"小游戏.而在我几经努力奋斗到266分的时候,已经有技术大牛占据1999的高地... 抱着试一试的心态和蠢蠢欲动的好奇心... 实现了程序助力玩游戏... 具体代码来自gitHub的python大牛... 感兴趣的同学可以和我一起站在巨人的肩膀上... 另外说一点, 如果以后还想玩"跳一跳"的话... 不建议你接着往下看... 因为当你有了捷径... 整个游戏瞬间变得索然无味... 如果

年薪百万的程序员都是站在巨人的肩膀上开发

要想成为一名软件开发者需要学习各种专业知识.技术与框架.比如算法.数据结构.编程语言.流行框架等.但是要想成为更加出色的软件开发者,你要学习的就不仅仅是专业上的知识了. 标题过于浮夸,希望大家谅解,但本篇是满满的干货.今天我想分享一点关于软件开发者如何改进职业技能从而变得更擅长于自身工作的技巧.这里要谈的主题是通用性的,并没有针对任何特定的技术栈.其实这里要谈的大部分甚至都不是针对 IT 的.这些都是如何形成个人特质,跟同事.客户改进协作,以及拓展作为软件开发者职业生涯的一般性建议. 端到端理解

Android系统研究资料收集---站在前人的肩膀上

Android系统研究资料收集---站在前人的肩膀上 针对Android系统研究任务,收集高价值资料在本页更新 AuthBlog:秋城https://www.cnblogs.com/houser0323 目录 1 官方网站 2 书籍 3 一些开发者的博客 1 官方网站 Android Open Source Project Android开源项目的官网,关于AOSP的官方资料都在这里,内容丰富全面偏概念性,适合用来总览Android aosp项目的全貌.跟踪了解版本特性 中文官网:https:/

软件工程——站在巨人的肩膀上抱团取暖

摘要 软件工程是一门研究用工程化方法构建和维护有效的.实用的和高质量的软件的学科. 而工程化的最主要的特点是系统化.规范化.可量化并且严格控制流程得完成开发或生产任务,在此严格的条件下优质.高效的进行生产活动. 前言 当初懵懂无知地选择了软件工程这门专业,过了大一一年才开始程序员该有的博客之旅.而我认为“程序猿”是最需要最会站在巨人的肩膀上的,代码靠借鉴,思路靠传承,在原有的基础上创新,于是成就了无数优秀的软件. 程序员都知道 :程序 = 算法 + 数据结构 软件 = 程序 + 软件工程 软件企