angularjs思维

AngularJS最显著的特点是用静态的HTML文档,就可以生成具有动态行为的页面。

还是前面的小时钟示例,我们使用AngularJS模板来重写,示例已经嵌入→_→:

HTML文件看起来像普通的HTML,只是其中多了一些特别的标记 (比如:ng-app,ez-clock等等)。在Angular中,这个HTML文件被称为模板。

ng-app这样的标记我们称之为指令。模板通过指令指示AngularJS进行必要的操作。 比如:ng-app指令用来通知AngularJS自动引导应用;ez-clock 指令用来通知AngularJS生成指定的时钟组件。

当AngularJS启动应用时,它会通过一个编译器解析处理这个模板文件,生成的结果就是: 视图:

AngularJS

我们定义了两个部件:模板(包含指令的HTML文件)和指令实现 (javascript文件),AngularJS将这两部分拼装起来,生成了最终的视图。

有点理解框架的含义了吗?

使用指令封装JavaScript代码

我们在模板中使用了一个自定义的标签ez-clock,而它变成了一个会动的时钟, 这期间发生了什么事情?

肯定不是浏览器干的,它不认识ez-clock是什么东西。

angular.min.js引入了基本的angularJS库,它会在浏览器载入HTML文档并且 建立好DOM树后,执行以下操作:

找到有ng-app属性的DOM节点

以这个节点为根节点,搜索自定义指令,发现ez-clock

调用ez-clock指令的实现函数(指令类工厂)进行展开

根据我们的定义,ez-clock的展开操作如下:

使用一个div元素替换这个自定义标签

创建一个定时器,在定时器触发时刷新div元素的innerText

ez-clock这样的非HTML标准标签,在AngularJS中之所以称为指令/directive, 就是指看到它时,基础框架需要对其进行解释,以便展开成浏览器可以理解 的东西(HTML元素和脚本),而这个解释的过程被称为:编译。

可见,AngularJS框架要求将HTML文档和JavaScript代码分割的更清晰,通常混杂在 HTML文档中的JavaScript代码,需要以指令的形式进行封装,而模板、指令 实现代码这两个部件,则由基础框架负责拼装运行。

将指令看做API

将DOM操作封装成指令,更容易进行分工与代码复用。

由于AngularJS更清晰地界定了一个WEB应用的组成部分,这样,在一个团队中,可以有人负责 实现指令,有人负责开发模板,各自干擅长的事情,效率更高,成本更低。

当然,从编写界面HTML模板的角度看,诸如ez-clock之类的指令比div更具有语义性, 使模板更容易维护,使指令的实现升级不影响模板,这也是不小的好处了。

与我们所熟悉的对象、函数这类接口完全不同,指令算是一种新型的API,它提供了在 静态化的HTML文件中,植入动态行为的能力:

定义自己的指令

AngularJS内置的指令不能完全满足实际开发的需要,通常我们需要定义自己的指令:

增强标准DOM元素的行为

比如,希望一个DOM元素是可拖拽的,那么可以这样写:

<p ez-draggable="true">...</p>

通过ez-draggable指令,我们赋予DOM元素可拖拽的能力。

自定义组件

比如,我希望一个图片裁剪功能,那么可以这样写:

<ez-photoshop src="a.jpg"></ez-photoshop>

通过ez-photoshop指令,我们定义了一个包含交互行为的web组件。

封装其他组件库

这不是AngularJS鼓励的方向,但是确实有强劲的需求。

起点:声明化

基于前面的示例,我们容易感受到使用AngularJS进行应用开发的一个重要的思维模式: 从构造声明式界面入手。

事实上,我猜测这也是Misko开发AngularJS最初的动机。稍早一些的Flex、WPF和Firefox 的XUL,或多或少给了Misko启发。

在使用AngularJS进行前端开发时,始终应该从构造声明式界面模板开始,如果现成的指令不够 用,那么就定义自己的指令、实现自己的指令。这是一个迭代的过程。

时间: 2025-01-14 23:00:31

angularjs思维的相关文章

AngularJs 与Jquery的对比分析,超详细!

闲来无事,在网上发现了一篇对比AngularJs和Jquery的文章.恰好最近自己也在研究AngularJs.特此收藏.需要的朋友可以参考. 原问题:假如我熟悉利用jQuery去开发客户端应用,那么我怎么上手angularjs,能否描述下所需要的模式转变,下面这些问题能够帮助你给出一个回答: 1.在设计客户端web应用的时候有什么区别,最大的区别是什么? 2.我应该停止使用哪些技术,同时又使用哪些技术作为替代? 3.是否存在服务端需要考虑的东西或者说一些限制呢? 回答: 1.不要首先设计好你的页

关于angularjS与jQuery框架的那些事

这篇文章主要介绍了jQuery和angularJS的区别浅析,本文着重讲解一个熟悉jQuery的程序员如何应对angularJS中的一些编程思想的转变吗,需要的朋友可以参考下 最近一直研究angularJs最大的感受就是它和之前的jQuery以及jQuery各种库的设计理念完全不一样.如果不能认识到这一点,而对于之前做jQuery开发的程序员,去直接学习angularJs的话,很可能学了很久还不知道这个东西到底是什么,拿来做什么的,怎么和UI进行结合等问题,我也是到处找资料看了看,在此把自己学习

具有jQuery背景的程序员如何转换为AngularJS思考模式(译)

最近一直在研究angularjs,最大的感受就是它和之前的jQuery以及基于jQuery的各种库设计理念完全不同,如果不能认识到这点而对于之前做jQuery开发的程序员,去直接学习angularjs的话,很可能学了很久还不知道这个东西能用来干什么以及怎么使用,怎么和UI进行结合等问题,在stackoverflow上找到一篇关于这方面的文章,阅读之后颇有收获,在此基础上将它译成中文,以求抛砖引玉大家一同学习. 原问题:假如我熟悉利用jQuery去开发客户端应用,那么我怎么上手angularjs,

对比jQuery和AngularJS的不同思维模式

jQuery是dom驱动,AngularJS是数据驱动,这里有一篇文章阐述的非常好,建议看看 本文来自StackOverFlow上How do I “think in AngularJS” if I have a jQuery background?一题中得票最高的回答.该回答得票超过3000次,回答者Josh David Miller是活跃于开源社区的开发者,也是Emergenesis公司的联合创始人.该答案最初由数云架构师韩铮翻译并发布在自己的博客上,在征得Josh同意后由韩铮本人推荐给 I

[转]如果我有jQuery背景,我应该如何切换到AngularJS的思维模式?

导言 stackoverflow上有一个人问了一个问题:如果我有jQuery背景,我应该如何切换到AngularJS的思维模式? 有一个回复非常经典,获得了两千多票. 为了让国内开发者也能领略到其中的核心思想,现把这个问题和答案翻译出来供大家参考. Question 假设我已经熟悉了如何使用jQuery来开发客户端应用,我现在打算使用AngularJS.请描述一下有那些思维模式方面的东西需要转变吗?下面是举出一些具体的问题,用来帮助你回答我的这个问题: 我应该以何种不同的方式来架构和设计客户端w

对比jQuery和AngularJS的不同思维模

Question 假设我已经熟悉了如何使用jQuery来开发客户端应用,我现在打算使用AngularJS.请描述一下有那些思维模式方面的东西需要转变吗?下面是举出一些具体的问题,用来帮助你回答我的这个问题: 我应该以何种不同的方式来架构和设计客户端web应用?最大的不同点是什么? 我应该停止使用哪些东西:又应该开始使用哪些东西来替代? 服务端有没有什么需要考虑或者说需要约束的地方? 1.不要预先设计页面,然后再用DOM操作去修改它 在jQuery里面,你会先设计好一个页面,然后再让它变成动态的.

AngularJS应用开发思维之3:依赖注入

找不到的API? AngularJS提供了一些功能的封装,但是当你试图通过全局对象angular去 访问这些功能时,却发现与以往遇到的库大不相同. $http 比如,在jQuery中,我们知道它的API通过一个全局对象:$ 暴露出来,当你需要 进行ajax调用时,使用$.ajax()就可以了.这样的API很符合思维的预期. AngularJS也暴露了一个全局对象:angular,也对ajax调用进行封装提供了一个 $http对象,但是,但是,当你试图沿用旧经验访问angular.$http时,发

AngularJS应用开发思维之1:声明式界面

这篇博客之前承接上一篇:http://www.cnblogs.com/xuema/p/4335180.html 重写示例:模板.指令和视图 AngularJS最显著的特点是用静态的HTML文档,就可以生成具有动态行为的页面. 还是前面的小时钟示例,我们使用AngularJS模板来重写,示例已经嵌入→_→: 示例地址:http://www.hubwiz.com/course/54f3ba65e564e50cfccbad4b/ HTML文件看起来像普通的HTML,只是其中多了一些特别的标记 (比如:

桂电在线_微信公众平台开发之-运用angularjs显示学校公告新闻列表和详情页面

折腾angularjs的感悟 几天折腾,总的来说看了很多博客,要么不是最新的技术文档,要么写得不够完整,因为别人是基于他们的理解写的技术博客代码不一定会贴完整,所以一旦你用的是最新的想要看完整的实例就只能去官网查阅文档,现在通过实现下面的两个功能才真正了解什么是前端的MVVM框架. 另外,总结下我理解中的MVVM框架:后台php是MVC框架,一直做法是php处理数据,然后把数据渲染到模板,然后后台返回html页面给浏览器, 现在前端mvvm(model-view-viewmodel)就是:mod