很多人感觉jquery 比 Angularjs 火太多啦,Angularjs怎么会是排名第一
首先说明一下,Angularjs 是JS的一个框架,而jquery 是一个JS库
jquery 就像一个工具箱,为我们提供了非常丰富好用的工具,我们想怎么用就怎么用,jquery只负责让我们更便利,不关心我们的工作方式和流程
Angularjs 则定义了一套工作规范,只能按照他的规则来工作,Angularjs是依靠高效的工作规范来提高我们的开发效率的
Angularjs的显著优势
数据双向绑定
举一个angular最简单的例子
<body ng-app>
<span>Insert your name:</span>
<input type="text" ng-model="user.name"/>
<h3>{{user.name}}</h3>
</body>
执行后,在 input 中输入的内容会立即在 h3 中显示出来,input 和 h3 的内容完全同步
这就是数据的双向绑定,大概思路:
ng-model 指令在作用域中添加了一个名为 user.name 的数据模型,input 的值一变,数据模型也跟着改变{{user.name}} 是Angularjs的模板语言,用来显示名为user.name的数据模型的值,当数据模型的值改变时,会通知{{user.name}}进行改变
这样,通过隐藏的数据模型就实现了数据的双向绑定
如果没有Angularjs定义的这个规则,通过jquery来实现的话还是稍显复杂的
强大的内置指令
指令为html引入了新的语法,使html更强大
Angularjs内置了很多强大的指令,例如 repeat循环指令
<body ng-app="app" ng-controller="MainCtrl">
<ul>
<li ng-repeat="person in developers">
{{person.name}} from {{person.country}}
</li>
</ul>
</body>
ng-repeat 指令非常简单的实现了 li 的循环处理
如果使用jquery实现,可能要引入模板插件,编写li循环模板代码,然后调用模板处理数据,从代码复杂度和代码可读性上看,Angularjs的指令都更加有优势
可自定义扩展指令
内置指令毕竟有限,Angularjs允许我们自定义指令,例如
app.directive('hello', function() {
return {
restrict: "E",
replace: true,
template: "<div>Hello readers</div>"
}
});
这里简单定义了一个名为 'hello' 的标签,在html中就可以直接使用了 <hello></hello>
再看个例子,我们通过jquery的插件显示饼图
在html中定义一个容器节点
<div id="chart"></div>
在JS中调用饼图插件
$('#chart').pieChart({ ... });
在这里,如果不去看js代码,只看html很难理解这个节点的含义
如果使用指令,就会清晰很多
<pie-chart width="400" height="400" data="data"></pie-chart>
通过上面的几个例子,看到了Angularjs的一些优势,Angularjs的设计的确很优秀,例如通过模板和控制器使代码和逻辑层次分明,还引入了依赖注入、服务等后端框架常用的概念,对表单验证和单元测试也有非常好的支持,Angularjs还是非常值得学习的