拥抱AngularJS
文中一些地方AngularJS简称ng
简介:
ng诞生于2009年,由Misko Hevery等创建,后被Google收购,为克服HTML在构建应用上的不足而设计。
是一款优秀的前端JS框架,核心特性:MVVM(Model-View-ViewModel)、模块化、双向数据绑定、依赖注入。
入门:
书籍:
源码:
API:
介绍:
模块介绍:(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应用场景:
- 当我们需要在应用开始前对service进行配置的时候,eg:我们需要配置services在不同的部署环境里(开发、测试、生产),使用不同的后端接口处理时。
- 当我们打算发布开源时。
参考资料: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详解
其他资料:
何时应该使用Directive、Controller、Service?
实战总结:
深入:
总结:
初识ng时,被它的依赖注入所迷惑,又被它的双向数据绑定深深吸引,颠覆了以往用jQuery做项目时的思想。
仅记得做Java项目时,spring框架有一套依赖注入的模式。前端框架中引入依赖注入的思想,不得不佩服ng作者的脑洞。
后端出生的FE,难以抗拒地喜欢上了这个JS框架,虽然它被很多人质疑(学习成本高,太臃肿etc)。
相信会有更多的FE engineer爱上它。
PS:
文中若有不妥之处,请留言or私信告知,不甚感激。
拥抱AngularJS的更多相关文章
- 告别node-forever,拥抱PM2
告别node-forever,拥抱PM2 返回原文英文原文:Goodbye node-forever,hello PM2 devo.ps团队对JavaScript的迷恋已经不是什么秘密了;node.j ...
- 用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 ...
- 前端技术大行其道,再不拥抱TypeScript你就老了!
本篇文章旨在介绍下TypeScript这门新兴的程序设计语言,不需要你有多么强的专业知识,只需要你有半支烟的功夫. 好了,废话不多说,赶紧进入正题.为什么你需要拥抱TypeScript?那么你首先需要 ...
- 对比jQuery和AngularJS的不同思维模式
jQuery是dom驱动,AngularJS是数据驱动,这里有一篇文章阐述的非常好,建议看看 本文来自StackOverFlow上How do I “think in AngularJS” if I ...
- AngularJS性能优化心得,自己踩过的抗,及一些别人的经验(转哦)
脏数据检查 != 轮询检查更新 谈起angular的脏检查机制(dirty-checking), 常见的误解就是认为: ng是定时轮询去检查model是否变更.其实,ng只有在指定事件触发后,才进入$ ...
- 通过AngularJS实现前端与后台的数据对接(二)——服务(service,$http)篇
什么是服务? 服务提供了一种能在应用的整个生命周期内保持数据的方法,它能够在控制器之间进行通信,并且能保证数据的一致性. 服务是一个单例对象,在每个应用中只会被实例化一次(被$injector实例化) ...
- AngularJs之九(ending......)
今天继续angularJs,但也是最后一篇关于它的了,基础部分差不多也就这些,后续有机会再写它的提升部分. 今天要写的也是一个基础的选择列表: 一:使用ng-options,数组进行循环. <d ...
- AngularJS过滤器filter-保留小数,小数点-$filter
AngularJS 保留小数 默认是保留3位 固定的套路是 {{deom | number:4}} 意思就是保留小数点 的后四位 在渲染页面的时候 加入这儿个代码 用来精确浮点数,指定小数点 ...
- Angular企业级开发(1)-AngularJS简介
AngularJS介绍 AngularJS是一个功能完善的JavaScript前端框架,同时是基于MVC(Model-View-Controller理念的框架,使用它能够高效的开发桌面web app和 ...
随机推荐
- TCP粘包和半包的处理方法
先把处理的方法的代码放这里: 解析数据帧的代码: bool CSocket::findData(byte* buff, int& len) { for (int i = 0; i <= ...
- jquery事件链式写法
<!DOCTYPE html><html lang="en" xmlns="http://www.w3.org/1999/xhtml"> ...
- Laravel 5.1 ACL权限控制 二 之策略类
随着应用逻辑越来越复杂,要处理的权限越来越多,将所有权限定义在AuthServiceProvider显然不是一个明智的做法,因此Laravel引入了策略类,策略类是一些原生的PHP类,和控制器基于资源 ...
- setTimeout和setInterval区别
setTimeout和setInterval这两个函数, 大家肯定都不陌生, 但可能并不是每个用过这两个方法的同学, 都了解其内部的实质 甚至可能会错误的把两个实现定时调用的函数理解成了类似threa ...
- 用jmeter进行多用户并发压力测试 [转]
近日manager要求对项目进行压力测试,开始对jmeter进行了研究.jmeter是Apache一个开源项目,可对各种项目进行测试,甚至包括junit. 测试要求如下,多用户同时登陆web应用程序, ...
- jquery 动态增加的html元素,初始化设置在id或class上的事件无效
一般情况,我们会在页面初始化完成后对class定义一些全局事件,举个栗子: $(document).ready(function(){ $(".class").on("m ...
- phpeclipse
http://phpeclipse.sourceforge.net/update/stable/1.2.x/
- ubuntu 10.04 下 samba 服务的配置
1. 安装 $ sudo apt-get install samba $ sudo apt-get install samba-common $ sudo apt-get install samb . ...
- 关于String.concat()方法和StringBuffer.append()方法的学习:方法是如何追加字符到源字符串的
问题分析: 首先,看看两段代码的运行结果,两段代码分别是: 第一段代码,关于String.concat()方法的测试: public static void main(String[] args) { ...
- 破解企业QQ对个人QQ登陆的限制(原创)
运行系统:WIN7 破解时间:2014-02-19 破解思路:自从2013-11-11的1.85版企业qq更新后,网上流传的破解方法(运行文件BeatQQEIM.bat)已经不起作用了,可以同时登陆, ...