AngularJS学习总结
2017-10-23 17:31
155 查看
新项目中使用的是Angular.js 故此学习
优点:
1. 模板功能强大丰富,并且是声明式的,自带了丰富的Angular指令;
2. 是一个比较完善的前端MV*框架,包含模板,数据双向绑定,路由,模块化,服务,过滤器,依赖注入等所有功能;
3. 自定义Directive,比jQuery插件还灵活,但是需要深入了解Directive的一些特性,简单的封装容易,复杂一点官方没有提供详细的介绍文档,我们可以通过阅读源代码来找到某些我们需要的东西,如:在directive使用 $parse;
4. ng模块化比较大胆的引入了Java的一些东西(依赖注入),能够很容易的写出可复用的代码,对于敏捷开发的团队来说非常有帮助,我们的项目从上线到目前,UI变化很大,在摸索中迭代产品,但是js的代码基本上很少改动。
5. 补充:Angular支持单元测试和e2e-testing。
缺点:
1. 验证功能错误信息显示比较薄弱,需要写很多模板标签,没有jQuery Validate方便,所以我们自己封装了验证的错误信息提示,详细参考
2. ngView只能有一个,不能嵌套多个视图,虽然有
angular-ui/ui-router · GitHub 解决,但是貌似ui-router 对于URL的控制不是很灵活,必须是嵌套式的(也许我没有深入了解或者新版本有改进);
3. 对于特别复杂的应用场景,貌似性能有点问题,特别是在Windows下使用chrome浏览器,不知道是内存泄漏了还是什么其他问题,没有找到好的解决方案,奇怪的是在IE10下反而很快,对此还在观察中;
4. 这次从1.0.X升级到1.2.X,貌似有比较大的调整,没有完美兼容低版本,升级之后可能会导致一个兼容性的BUG,具体详细信息参考官方文档
AngularJS ,对应的中文版本:Angular 1.0到1.2
迁移指南
5. ng提倡在控制器里面不要有操作DOM的代码,对于一些jQuery 插件的使用,如果想不破坏代码的整洁性,需要写一些directive去封装插件,但是现在有很多插件的版本已经支持Angular了,如:jQuery
File Upload Demo
6. Angular 太笨重了,没有让用户选择一个轻量级的版本,当然1.2.X后,Angular也在做一些更改,比如把route,animate等模块独立出去,让用户自己去选择。
当然使用的人多才会暴露更多的问题,一起为这些问题寻找解决方案是一个社区的良性趋势,选择Angular,的确使我们的开发效率大大提高。
使用ng主要是为了减轻前端js代码量,增加js的复用。而且ng是一个很炫的框架。那么ng到底有哪些优势了?我们为什么要使用ng了?
首先分析下ng做的应用与传统应用的区别:
a:通过iframe加载菜单,加载页面。
b:每个功能点都是独立页面。
c:每个功能点包含完整且独立的js和css。
a:每个功能都是部件。
b:动态加载。
c:整个系统都是共用一个域。
通过上面的比较可以知道使用ng做的单页面应用在加载时更快,并且更适应当下的ajax与后台交互方式。如果大家有ng的基础会发现使用ng可以重用很多代码,如写成指令或者服务。那么ng与传统的技术比较有什么区别了?
多页面的应用通过组装和拼接服务器上的数据来生成HTML,然后输出到浏览器,这样会造成代码臃肿不堪而且极为不雅观。Angularjs不同于此的是,传递模板和数据到浏览器,然后在浏览器端进行组装。浏览器的角色变成了只提供模板的静态资源和模板所需要的数据。当然还有很多好用的js模板类库,比如:arttemplate。
MVC的核心概念是,在代码之间明确分离管理数据(模型),应程序逻辑(控制器),并将数据呈现给用户(视图)。在Angularjs单页面应用中,视图就是DOM,控制器就是Javascript类,模型数据存储在对象属性中。
典型的DOM操作,都是先通过id或者class找到相应的dom节点然后对dom节点进行赋值等操作。这样的工作重复性很高,还要确保界面和javascript属性中获取到数据时正确的状态(如有的dom节点是js动态生成的,并不能直接绑定click函数等)。而使用了Angularjs就不用担心查找dom节点以及js动态生成dom节点不能绑定事件的事了,使用ng只需要将要绑定的事件写在相应的dom上即可。至于数据绑定,则是控制器中模型的数据与视图层模型的数据时刻保持一致。
如:
<html ng-app>
<head>
<script src="angular.js"></script>
<script src="controllers.js"></script>
</head>
<body>
<div ng-controller='HelloController'>
<input ng-model='greeting.text'>
<p>{{greeting.text}}, World</p>
</div>
</body>
</html>
控制器代码:
function HelloController($scope) {
$scope.greeting = { text: 'Hello' };
}
当控制中greeting的模型数据改变时试图层的数据将会进行相应的改变。
通过依赖注入$scope可以对控制器等注入一些服务。如:
function HelloController($scope, $log) {
$scope.greeting = { text: 'Hello' };
}
在此控制器中通过依赖注入将$scope,$log注入到控制器,提供给开发者使用。依赖注入的另一种方式
HelloController.$inject($scope,$log);
一个指令用来引入新的HTML语法。指令是DOM元素上的标记,使元素拥有特定的行为。举例来说,静态的HTML不知道如何来创建和展现一个日期选择器控件。让HTML能识别这个语法,我们需要使用指令。指令通过某种方法来创建一个能够支持日期选择的元素。我们会循序渐进地介绍这是如何实现的。 如果你写过AngularJS的应用,那么你一定已经使用过指令,不管你有没有意识到。你肯定已经用过简单的指令,比如 ng-mode, ng-repeat, ng-show等。这些指令都赋予DOM元素特定的行为。例如,ng-repeat
重复特定的元素,ng-show 有条件地显示一个元素。如果你想让一个元素支持拖拽,你也需要创建一个指令来实现它。指令背后基本的想法很简单。它通过对元素绑定事件监听或者改变DOM而使HTML拥有真实的交互性。
<!DOCTYPE html>
<html ng-app="superHero">
<head>
<script src="../public/angular/angular.min.js"></script>
<script src="../public/angular/angular-resource.js"></script>
<script src="../public/myJs/mainday3.js"></script>
<link rel="stylesheet" href="../public/foundation.min.css"/>
<title></title>
<META HTTP-EQUIV="Refresh" content="54441">
</head>
<body>df
<div>
<superman class='myTitle'></superman>
<div superman>hello</div>
</div>
</body>
</html>
js控制中代码为:
var myApp=angular.module("superHero",[]);
myApp.directive("superman",function(){
return{
restrict: 'EA',
replace: true,
transclude:true,
scope:function(){
title:'myTitle'
},
template:"<div class='title'>zhangwesdfjslda;</div>" ,
link:function(scope,element,attrs){
scope.title = "alert-box";
// alert("jinru");
}
};
});
http://www.runoob.com/angularjs/angularjs-tutorial.html http://www.cnblogs.com/zhangweidongx/p/4329399.html http://blog.csdn.net/u012125579/article/details/52744093
优点:
1. 模板功能强大丰富,并且是声明式的,自带了丰富的Angular指令;
2. 是一个比较完善的前端MV*框架,包含模板,数据双向绑定,路由,模块化,服务,过滤器,依赖注入等所有功能;
3. 自定义Directive,比jQuery插件还灵活,但是需要深入了解Directive的一些特性,简单的封装容易,复杂一点官方没有提供详细的介绍文档,我们可以通过阅读源代码来找到某些我们需要的东西,如:在directive使用 $parse;
4. ng模块化比较大胆的引入了Java的一些东西(依赖注入),能够很容易的写出可复用的代码,对于敏捷开发的团队来说非常有帮助,我们的项目从上线到目前,UI变化很大,在摸索中迭代产品,但是js的代码基本上很少改动。
5. 补充:Angular支持单元测试和e2e-testing。
缺点:
1. 验证功能错误信息显示比较薄弱,需要写很多模板标签,没有jQuery Validate方便,所以我们自己封装了验证的错误信息提示,详细参考
2. ngView只能有一个,不能嵌套多个视图,虽然有
angular-ui/ui-router · GitHub 解决,但是貌似ui-router 对于URL的控制不是很灵活,必须是嵌套式的(也许我没有深入了解或者新版本有改进);
3. 对于特别复杂的应用场景,貌似性能有点问题,特别是在Windows下使用chrome浏览器,不知道是内存泄漏了还是什么其他问题,没有找到好的解决方案,奇怪的是在IE10下反而很快,对此还在观察中;
4. 这次从1.0.X升级到1.2.X,貌似有比较大的调整,没有完美兼容低版本,升级之后可能会导致一个兼容性的BUG,具体详细信息参考官方文档
AngularJS ,对应的中文版本:Angular 1.0到1.2
迁移指南
5. ng提倡在控制器里面不要有操作DOM的代码,对于一些jQuery 插件的使用,如果想不破坏代码的整洁性,需要写一些directive去封装插件,但是现在有很多插件的版本已经支持Angular了,如:jQuery
File Upload Demo
6. Angular 太笨重了,没有让用户选择一个轻量级的版本,当然1.2.X后,Angular也在做一些更改,比如把route,animate等模块独立出去,让用户自己去选择。
当然使用的人多才会暴露更多的问题,一起为这些问题寻找解决方案是一个社区的良性趋势,选择Angular,的确使我们的开发效率大大提高。
使用ng主要是为了减轻前端js代码量,增加js的复用。而且ng是一个很炫的框架。那么ng到底有哪些优势了?我们为什么要使用ng了?
首先分析下ng做的应用与传统应用的区别:
传统企业应用:
a:通过iframe加载菜单,加载页面。b:每个功能点都是独立页面。
c:每个功能点包含完整且独立的js和css。
使用Angularjs的单页面应用:
a:每个功能都是部件。b:动态加载。
c:整个系统都是共用一个域。
通过上面的比较可以知道使用ng做的单页面应用在加载时更快,并且更适应当下的ajax与后台交互方式。如果大家有ng的基础会发现使用ng可以重用很多代码,如写成指令或者服务。那么ng与传统的技术比较有什么区别了?
1:客户端模板
多页面的应用通过组装和拼接服务器上的数据来生成HTML,然后输出到浏览器,这样会造成代码臃肿不堪而且极为不雅观。Angularjs不同于此的是,传递模板和数据到浏览器,然后在浏览器端进行组装。浏览器的角色变成了只提供模板的静态资源和模板所需要的数据。当然还有很多好用的js模板类库,比如:arttemplate。
2. Angularjs使用了传统的mvc模式
MVC的核心概念是,在代码之间明确分离管理数据(模型),应程序逻辑(控制器),并将数据呈现给用户(视图)。在Angularjs单页面应用中,视图就是DOM,控制器就是Javascript类,模型数据存储在对象属性中。
3. 数据绑定
典型的DOM操作,都是先通过id或者class找到相应的dom节点然后对dom节点进行赋值等操作。这样的工作重复性很高,还要确保界面和javascript属性中获取到数据时正确的状态(如有的dom节点是js动态生成的,并不能直接绑定click函数等)。而使用了Angularjs就不用担心查找dom节点以及js动态生成dom节点不能绑定事件的事了,使用ng只需要将要绑定的事件写在相应的dom上即可。至于数据绑定,则是控制器中模型的数据与视图层模型的数据时刻保持一致。如:
<html ng-app>
<head>
<script src="angular.js"></script>
<script src="controllers.js"></script>
</head>
<body>
<div ng-controller='HelloController'>
<input ng-model='greeting.text'>
<p>{{greeting.text}}, World</p>
</div>
</body>
</html>
控制器代码:
function HelloController($scope) {
$scope.greeting = { text: 'Hello' };
}
当控制中greeting的模型数据改变时试图层的数据将会进行相应的改变。
4:依赖注入
通过依赖注入$scope可以对控制器等注入一些服务。如:function HelloController($scope, $log) {
$scope.greeting = { text: 'Hello' };
}
在此控制器中通过依赖注入将$scope,$log注入到控制器,提供给开发者使用。依赖注入的另一种方式
HelloController.$inject($scope,$log);
5:指令
一个指令用来引入新的HTML语法。指令是DOM元素上的标记,使元素拥有特定的行为。举例来说,静态的HTML不知道如何来创建和展现一个日期选择器控件。让HTML能识别这个语法,我们需要使用指令。指令通过某种方法来创建一个能够支持日期选择的元素。我们会循序渐进地介绍这是如何实现的。 如果你写过AngularJS的应用,那么你一定已经使用过指令,不管你有没有意识到。你肯定已经用过简单的指令,比如 ng-mode, ng-repeat, ng-show等。这些指令都赋予DOM元素特定的行为。例如,ng-repeat重复特定的元素,ng-show 有条件地显示一个元素。如果你想让一个元素支持拖拽,你也需要创建一个指令来实现它。指令背后基本的想法很简单。它通过对元素绑定事件监听或者改变DOM而使HTML拥有真实的交互性。
<!DOCTYPE html>
<html ng-app="superHero">
<head>
<script src="../public/angular/angular.min.js"></script>
<script src="../public/angular/angular-resource.js"></script>
<script src="../public/myJs/mainday3.js"></script>
<link rel="stylesheet" href="../public/foundation.min.css"/>
<title></title>
<META HTTP-EQUIV="Refresh" content="54441">
</head>
<body>df
<div>
<superman class='myTitle'></superman>
<div superman>hello</div>
</div>
</body>
</html>
js控制中代码为:
var myApp=angular.module("superHero",[]);
myApp.directive("superman",function(){
return{
restrict: 'EA',
replace: true,
transclude:true,
scope:function(){
title:'myTitle'
},
template:"<div class='title'>zhangwesdfjslda;</div>" ,
link:function(scope,element,attrs){
scope.title = "alert-box";
// alert("jinru");
}
};
});
http://www.runoob.com/angularjs/angularjs-tutorial.html http://www.cnblogs.com/zhangweidongx/p/4329399.html http://blog.csdn.net/u012125579/article/details/52744093
相关文章推荐
- Angularjs 学习总结 -- 实现省市的三级联动
- AngularJS学习总结
- AngularJS学习总结
- 前端MVC学习总结(三)——AngularJS服务、路由、内置API、jQueryLite
- 【angularjs】【学习心得】ng-class总结
- angularjs学习总结 详细教程
- angularjs学习总结(~~很详细的教程)
- angularjs学习总结 详细教程
- 【AngularJS学习笔记】02 小杂烩及学习总结
- angularjs学习总结 详细教程
- 【总结】AngularJs学习总结
- AngularJs学习总结-了解基本特性(-)
- angularjs学习总结 详细教程
- 关于AngularJs中的路由学习总结
- angularjs学习总结 详细教程
- 学习angularjs总结(一)
- AngularJs学习总结
- AngularJS—学习总结
- angularjs学习总结 详细教程
- angularjs学习总结(~~很详细的教程) 适合快速了解angularjs整体结构 有个整体印象