angularJs为什么在近几年风头一时无二?
AngularJs在近几年一致如火如荼,久经沙场而常胜不衰。如果某位同学还没有接触过Angular,那你很可能会错过阐释“Javascript时世界上最灵活的语言”的又一个深刻的例子了。说了这么多,您有没有对Angular产生了一丝兴趣呢?(本人前端新手一枚,由于最近刚开始写博客,想到哪就写到哪,逻辑可能不是按常规的来,请各位看官见谅。!第一次接触angualr,如果不能理解或者不能赞同的,可跳过此篇直接进入下一篇内容篇。而且后面的博客都是基于angular1.0版本的描述。)
那么,Angualr到底有什么魅力或者说区别去其他市面上框架的的地方呢?
angularJs是一个为动态web应用设计的框架,他能让你你用HTML作为模版语言,通过拓展html的语法,能更清楚的让你构建你的应用组件。他的创新点在于数据绑定和依赖注入,它是你不在写大量的代码了。这些全都是通过浏览器端的实现。angularJs是为了客服html在构建应用上的不足而实现的,HTML作为一门很好的静态文本展示设计的申明式语言,但要构建web应用的话,就显得乏力了,所以我们需要做一些事情来让浏览器实现我们想要的。通常,我们是通过以下技术来解决静态网页技术在构建动态应用上的不足:
类库:他是一些函数的集合,如jquery,它能帮你写web应用,其主导作用的还是你的代码,由你来决定何时使用类库:
框架:一种特殊的、已经实现了的WEB应用,你只需要对它填充具体的业务逻辑。这里框架是起主导作用的,由它来根据具体的应用逻辑来调用你的代码。例如backbone.js,ember.js等等。
AngularJS使用了不同的方法,它尝试去补足HTML本身在构建应用方面的缺陷。AngularJS通过使用我们称为标识符(directives)的结构,让浏览器能够识别新的语法。例如:
1.使用双大括号{{}}
语法进行数据绑定;
2.使用DOM控制结构来实现迭代或者隐藏DOM片段;
3.支持表单和表单的验证;
4.能将逻辑代码关联到相关的DOM元素上;
5.能将HTML分组成可重用的组件。
在我个人使用angular的过程中,给我印象最深刻的当属angular的申明式语法!angualr使用HTML申明式语法定义交互接口(app's user interface).HTML在编写静态页面时,有很多申明式呃结构来控制格式,比如,你要把某个内容居中,你不必告诉浏览器“去找到窗口的中点位置,然后跟内容的中间结合”。你只需要添加一个 align="center" 的属性给需要内容居中的元素就行了。这就是声明式语言的强大之处。但是声明式语言也有力所不能及的地方,原因之一在于你不能用它来让浏览器识别新的语法。比如说,你不要内容居中,而是居左到1/3,这时它就做不到了。所以我们需要一个办法让浏览器能学会新的HTML语法。ngularJS的HTML编译器能让浏览器识别新的HTML语法。它能让你将行为关联到HTML元素或者属性上,甚至能让你创造具有自定义行为的新元素。AngularJS称这种行为扩展为“指令”。
注意:编译的过程都会在浏览器端发生;服务器端不会参与到其中的任何步骤,也不会做预编译。
给我印象深刻第二个就是它的数据模型(Data Models)。Angular的数据模型其实还是一个普通的javascript对象,也就是说创建一个angualr data model ,并不需要额外的构造函数Constructor(继承javascript中的Object()函数就行)。也就是说,你可以随意去添加或者改变或者循环model的属性,这样你的代码会看起来和原始javascript写法逻辑一致。区别于其他的是data models,Angular数据模型更接近controller和view这两个层。为了区别于其他的数据模型,Angular称之为scopes。而scopes本身是没有初始化任何数据的,只有通过在controler中在逻辑需求中填充数据。只要在angular中controller中控制的scope中的数据,会自动绑定到view中。
第三个,就是Angular极具特色的directives。想象一下,当HTML中拥有海量丰富元素,例如<generation></generation>,<grid></grid>。这样我们就不用去操作DOM来把它伪装成类似<generation></generation>,<grid></grid>功能的标签。当定义了这些属性或者元素后,就可以直接讲这些属性赋值给html标签,或者把元素直接当成标签应用。那么Angualr是如何定义这些标签或者元素的呢?通过把DOM操作这部分代码放在directives中,我们可以把它从MVC中分离。这样,我们MVC框架就只关心是否跟新视图中的新数据。
第四个,就是controllers,它所作的唯一工作就是操作scope。这里面主要是一些处理业务逻辑的代码。既然controller如此简单,那么所有的很复杂的逻辑代码写在哪里呢?当然就是services,顾名思义。services不会被app所载入,但是简单的提供了一些对外的接口,那些你想暴露的接口。大部分时间它会同步服务端来维护离线数据存储和暴露一些方法来推送数据到后端,或者也可以用来
创建一个共享服务资源,可以允许多个控制器来分享这些资源。
先写到这里吧。晚上继续更。
---------我是萌萌嗒分割线。。。
以上是Angular给我影响比较深刻的几个概念。其实还有很多其他的,为了更好的阐述angular各个模块的用法,先不向大家介绍这些概念了啊,后面会一个个和大家剖析每个模块的用处。最后会做一个综合性总结。