文中一些地方AngularJS简称ng

简介:

  ng诞生于2009年,由Misko Hevery等创建,后被Google收购,为克服HTML在构建应用上的不足而设计。

  是一款优秀的前端JS框架,核心特性:MVVM(Model-View-ViewModel)、模块化、双向数据绑定、依赖注入。

  官网:https://angularjs.org/

  中文网:http://www.apjs.net/

入门:

  参考地址

书籍:

  用AngularJS开发下一代Web应用

   AngularJS权威教程

源码:

  GitHub

  https://code.angularjs.org/

API:

  AngularJSAPI

介绍:

  模块介绍:(v1.4.0)

  • angular.js                  ng 核心
  • angular-route.js         ng 路由(参考地址
  • angular-animate.js          ng 动画(参考地址
  • angular-cookies.js          ng Cookie(参考地址
  • angular-sanitize.js         ng 安全模块(应对XSS)
  • angular-messages.js         ng 表单验证(参考地址
  • angular-resource.js         ng restful数据交互(然并卵,只是封装了一层$http,可以用来请求本地json文件)
  • angular-mocks.js            ng 单元测试工具类(参考地址
  • angular-loader.js           ng http请求loading效果(参考地址
  • angular-scenario.js         ng 单元测试用
  • angular-touch.js            ng gestoures(针对移动端,基于jQuery Mobile的touch事件。不过貌似不太好用
  • angular-aria.js             ng 富互联网应用(Accessible Rich Internet Applications,貌似没啥用)
  • angular-meesage-format.js   ng 编译相关(谨慎使用,该文件只有当闭合编译器的高级选项标识时才会编译)

控制器(controller):

  简单理解为-通过依赖注入的方式,把service、依赖关系以及其他对象串联到一起,然后通过$scope把它们关联到view上。

var app = angular.module('app', []);
app.controller('indexCtrl', ['$scope', 'demoService', function($scope, demoService) {
  $scope.name = demoService.getName();
}])

  路由控制:

var app = angular.module('app', ['ngRoute']);
app.config(['$routeProvider', function($routeProvider) {
$routeProvider
.when('/list', {
templateUrl: 'module/order/list.html',
controller: 'listCtrl'
})
.when('/detail/:orderid', {
templateUrl: 'module/order/detail.html',
controller: 'detailCtrl'
})
.otherwise({redirectTo: '/dashboard'});
}])

指令(directive):

  简单理解为-在特定DOM上运行的函数,指令可以扩展这个DOM的功能。

  应用场景:封装通用插件

var app = angular.module('app', []);
app.directive('tree', function($location) {
return {
restrict: 'EA',
replace: true,
scope: {
treeNodes: '='
},
templateUrl: './script/directive/template/treeTmpl.html',
link: function($scope, $element, $attrs) {
  $scope.directTo = function(url) {
if(!!url) {
$location.path(url);
}
  }
}
}
})

  参考资料:

服务(service):

  简单理解为-单例对象

  三种构建方式:

    factory、service、provider

  区分:

  factory需要创建一个对象,并return这个对象。比较常用且容易理解。 

var app = angular.module('app', []);
app.factory('demoService', function() {
  var service = {
    getName: function() {
      var myName = 'Tom';   
      return myName;
    }
  };
  return service;
})

  service接收一个构造函数,不需要创建一个对象并return。跟factory的方式区别不大,源码里只是加了层封装。

var app = angular.module('app', []);
app.service('demoService', function() {
this.getName: function() {
var myName = 'Tom';
return myName;
}
})

  provider是创建service最底层的方法,需要在自带的$get()方法里做逻辑。跟上面两个的区别在于:可以通过config()方法配置创建service

var app = angular.module('app', []);
app.provider('demoService', function() {
this.$get = function() {
var service = {
getName: function() {
var myName = 'Tom';
return myName;
  }
}
return service;
}
})

  provider应用场景:

  1. 当我们需要在应用开始前对service进行配置的时候,eg:我们需要配置services在不同的部署环境里(开发、测试、生产),使用不同的后端接口处理时。
  2. 当我们打算发布开源时。

  参考资料:AngularJS中factory,service,provider的区别

过滤器(filter):

  用于处理数据的格式化(format),eg:日期格式化、数字精度处理、字符串截取、对象排序等。

var app = angular.module('app', []);
app.filter('sortFilter', function() {
return function(type) {
if(type.toUpperCase() == 'ASC') {
return 'DESC';
} else {
return 'ASC';
}
}
})

  参考资料:AngularJS filter详解

其他资料:

  Angular学习笔记

  AngularJS表单基础

  何时应该使用Directive、Controller、Service?

  AngularJS+RequireJS

  AngularJS与RequireJS集成

  玩转AngularJS的promise

实战总结:

  AngularJS实战总结

  AngularJS中的一些坑

  AngularJS开发一些经验总结  

深入:

  AngularJS数据双向绑定揭秘

  理解AngularJS的依赖注入

总结:

  初识ng时,被它的依赖注入所迷惑,又被它的双向数据绑定深深吸引,颠覆了以往用jQuery做项目时的思想。

  仅记得做Java项目时,spring框架有一套依赖注入的模式。前端框架中引入依赖注入的思想,不得不佩服ng作者的脑洞。

  后端出生的FE,难以抗拒地喜欢上了这个JS框架,虽然它被很多人质疑(学习成本高,太臃肿etc)。

  相信会有更多的FE engineer爱上它。

PS:

  文中若有不妥之处,请留言or私信告知,不甚感激。

      

拥抱AngularJS的更多相关文章

  1. 告别node-forever,拥抱PM2

    告别node-forever,拥抱PM2 返回原文英文原文:Goodbye node-forever,hello PM2 devo.ps团队对JavaScript的迷恋已经不是什么秘密了;node.j ...

  2. 用angular来思考问题How do I “think in AngularJS” if I have a jQuery background?

    [翻译]How do I “think in AngularJS” if I have a jQuery background? 1. 不要先设计页面,然后再使用DOM操作来改变它的展现 在jQuer ...

  3. 前端技术大行其道,再不拥抱TypeScript你就老了!

    本篇文章旨在介绍下TypeScript这门新兴的程序设计语言,不需要你有多么强的专业知识,只需要你有半支烟的功夫. 好了,废话不多说,赶紧进入正题.为什么你需要拥抱TypeScript?那么你首先需要 ...

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

    jQuery是dom驱动,AngularJS是数据驱动,这里有一篇文章阐述的非常好,建议看看 本文来自StackOverFlow上How do I “think in AngularJS” if I ...

  5. AngularJS性能优化心得,自己踩过的抗,及一些别人的经验(转哦)

    脏数据检查 != 轮询检查更新 谈起angular的脏检查机制(dirty-checking), 常见的误解就是认为: ng是定时轮询去检查model是否变更.其实,ng只有在指定事件触发后,才进入$ ...

  6. 通过AngularJS实现前端与后台的数据对接(二)——服务(service,$http)篇

    什么是服务? 服务提供了一种能在应用的整个生命周期内保持数据的方法,它能够在控制器之间进行通信,并且能保证数据的一致性. 服务是一个单例对象,在每个应用中只会被实例化一次(被$injector实例化) ...

  7. AngularJs之九(ending......)

    今天继续angularJs,但也是最后一篇关于它的了,基础部分差不多也就这些,后续有机会再写它的提升部分. 今天要写的也是一个基础的选择列表: 一:使用ng-options,数组进行循环. <d ...

  8. AngularJS过滤器filter-保留小数,小数点-$filter

    AngularJS      保留小数 默认是保留3位 固定的套路是 {{deom | number:4}} 意思就是保留小数点 的后四位 在渲染页面的时候 加入这儿个代码 用来精确浮点数,指定小数点 ...

  9. Angular企业级开发(1)-AngularJS简介

    AngularJS介绍 AngularJS是一个功能完善的JavaScript前端框架,同时是基于MVC(Model-View-Controller理念的框架,使用它能够高效的开发桌面web app和 ...

随机推荐

  1. BZOJ 2015: [Usaco2010 Feb]Chocolate Giving( 最短路 )

    裸最短路.. ------------------------------------------------------------------------------------ #include ...

  2. HTML5 DTD

    HTML5/HTML 4.01/XHTML 元素和有效的 DTD 下面的表格列出了所有的 HTML5/HTML 4.01/XHTML 元素,以及它们会出现在什么文档类型 (DTD) 中: 标签 HTM ...

  3. hdu 2841 Visible Trees

    /** 大意: 求[1,m], [1,n] 之间有多少个数互素...做了 1695 ,,这题就so easy 了 **/ #include <iostream> #include < ...

  4. Gsoap 使用心得 2

                                         Gsoap 返回图片byte的困惑 前些日子刚使用gsoap将二进制文件上传(服务期端使用c# wcf 编写),上传功能实现没 ...

  5. 一个i++和++i导致的严重的错误

    当我曾经在写一个strlen的实现时,用递归写出了如下的代码: int strlen(const char *s) { if(*s=='\0') ; else ; } 程序一运行就崩溃了,why!都是 ...

  6. POJ 1410 Intersection(线段相交&amp;&amp;推断点在矩形内&amp;&amp;坑爹)

    Intersection 大意:给你一条线段,给你一个矩形,问是否相交. 相交:线段全然在矩形内部算相交:线段与矩形随意一条边不规范相交算相交. 思路:知道详细的相交规则之后题事实上是不难的,可是还有 ...

  7. Handler总结

    一.整体工程图 二.activity_handler.xml <?xml version="1.0" encoding="utf-8"?> < ...

  8. C++ 学习笔记3,struct长度測试,struct存储时的对齐方式

    之所以专门为struct的长度写一篇測试,是由于原来c++对于struct的变量, 在分配内存的时候,c++对struct有一种特殊的存储机制. 看以下的測试: 一.在Windows7 32bit , ...

  9. z-index要同级比较,absolute包含块外有overflow-hidden

    z-index只能在position属性值为relative或absolute或fixed的元素上有效. z-index只决定同一父元素中的同级子元素的堆叠顺序. position:absolute ...

  10. Remoting简单实践

    一句话概括 remoting是微软的一种实现在不同的.net应用程序中进行分布式通信的技术 重要概念 原理大致是首先客户端通过remoting通道来获取服务器对象代理,通过序列化与反序列方式实现数据交 ...