Angular概述

一.angularJs

AngularJS简化应用开发的一个重要方法是,将一个些通用的低级开发操作包装起来提供给开发者。AngularJS会自动处理好这些低级操作。它们包括:
1.DOM操作
2.设置事件的监听
3.输入验证,因为AngularJS会处理大部分这些操作,所以开发者就能更多的专注在应用的业务逻辑上,更少地编写那些重复性的、易错的、低级的代码。

二. angularJs依赖注入机制

服务的声明方式factory、 service 和 provider
  1. $provide.provide(‘name’,function());
    mainApp.config(function($provide) {
    $provide.provider('MathService', function() {
    this.$get = function() {
    var factory = {};
    factory.multiply = function(a, b) {
    return a * b;
    }
    return factory;
    };
    });
    });
    2.factory(‘name’,function);

       mainApp.factory('MathService', function() {   
       var factory = {}; 
       factory.multiply = function(a, b) {
          return a * b; 
          }
         return factory;
       }); 
    

3.service(‘name’,function);
mainApp.service('CalcService', function(MathService){
this.square = function(a) {
return MathService.multiply(a,a);
}
});

provider 的特殊之处就是可以在 module 启动时进行配置(config方法), 从而达到特殊的用途, 比如在上面的 provider 中可以添加一个init方法, 可以在启动时调用这个方法, 进行一些额外的初始化工作

控制器controller的定义

4.controller(‘name’,function);

mainApp.controller('CalcController', function($scope, CalcService, defaultInput) {
     $scope.number = defaultInput;
     $scope.result = CalcService.square($scope.number);

     $scope.square = function() {
     $scope.result = CalcService.square($scope.number);
   }
 });

图1. AngularJs的api模型

QQ图片20160330172034.png
(1) 为什么需要依赖注入?
Class  A{
   Public void work_a(){
  }
}
Class  B{
  Private A a=new A();
  Public void work_b(){
       a.work_a();
 }
}

当修改A,比如修改A的类名,会要修改B;违背两个独立的单元,高内聚低耦合的原则;
B中的new A 是主要原因;
通过工厂来new A;
通过容器来存放管理A的示例;
通过注入来组合关联每个单元;

(2) Angular的依赖注入机制

图2. angularJs的内存模型

QQ图片20160330121527.png

三. angularJs写法建议

一个最简单的模块由两类代码块集合组成的:

配置代码块 - 在注入提供者注入和配置阶段执行。只有注入提供者和常量可以被注入到配置块中。这是为了防止服务在被配置好之前就被提前初始化。

运行代码块 - 在注入器被创建后执行,被用来启动应用的。只有实例和常量能被注入到运行块中。这是为了防止在运行后还出现对系统的配置。

代码实现:

 angular.module('myModule', []).  
 config(function(injectables) { // provider-injector 配置代码块
       // This is an example of config block.
       // You can have as many of these as you want.
       // You can only inject Providers (not instances)
       // into the config blocks.
  }). run(function(injectables) { // instance-injector 运行代码块
        // This is an example of a run block.
        // You can have as many of these as you want.
        // You can only inject instances (not Providers)
        // into the run blocks
  });

模块还有一些配置的简便方法,使用它们的效果等同于使用代码块。举个例子:

  angular.module('myModule', []).
  value('a', 123).
  factory('a', function() { return 123; }).
  directive('directiveName', ...).
  filter('filterName', ...);
  // is same as
 angular.module('myModule', []).
 config(function($provide, $compileProvider, $filterProvider) {
      $provide.value('a', 123)
      $provide.factory('a', function() { return 123; })
      $compileProvider.directive('directiveName', ...).
      $filterProvider.register('filterName', ...);
 });

配置块会按照$provide, $compileProvider, $filterProvider,注册的顺序,依次被应用。唯一的例外是对常量的定义,它们应该始终放在配置块的开始处。

 <!doctype html>
 <html ng-app="xmpl">
 <head>
     <script src="http://code.angularjs.org/angular-1.0.2.min.js"></script>
     <script src="script.js"></script>
 </head>
 <body>
     <div ng-controller="XmplController">
           {{ greeting }}!
     </div>
 </body>
 </html>

 script.js:
 angular.module('xmpl.service', []).   //服务模块
 value('greeter', {    //自定义greeter对象
    salutation: 'Hello',
    localize: function(localization) {
    this.salutation = localization.salutation;
 },
 greet: function(name) {
    return this.salutation + ' ' + name + '!';
 }
}).
 value('user', {   //自定义user对象
    load: function(name) {
    this.name = name;
    }
 });
 angular.module('xmpl.directive', []);  //指令模块
 angular.module('xmpl.filter', []);   //过滤器模块
 angular.module('xmpl', ['xmpl.service', 'xmpl.directive', 'xmpl.filter']).  //模块xmpl依赖于数组中的模块
 run(function(greeter, user) {
     // 初始化代码,应用启动时,会自动执行
  greeter.localize({
       salutation: 'Bonjour'
  });
  user.load('World');
 })
 // A Controller for your app
 var XmplController = function($scope, greeter, user) {
      $scope.greeting = greeter.greet(user.name);
  }
Angular start项目

https://github.com/unnKoel/angular-background-start
我制作的基于Angular开发后台管理系统的start项目;
可以作为后台管理系统模板来使用,也可以作为Angular的例子来参考;

四.参考

https://angularjs.org/ AngularJS官网

理解AngularJs参考
http://www.zhihu.com/question/22284218 AngularJs在实践中的优缺点
http://www.jb51.net/article/60505.htm AngularJS中的模块详解
http://blog.csdn.net/renfufei/article/details/19038123 AngularJS中的依赖注入
http://ju.outofmemory.cn/entry/121904 AngularJS 中的 factory、 service 和 provider

应用实践AngularJs参考
http://www.angularjs.cn/tag/AngularJS AngularJs入门教程
http://www.runoob.com/angularjs/angularjs-tutorial.html AngularJs简单教程

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,189评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,577评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,857评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,703评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,705评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,620评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,995评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,656评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,898评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,639评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,720评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,395评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,982评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,953评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,195评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,907评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,472评论 2 342

推荐阅读更多精彩内容

  • 1、angularjs的几大特性是什么? 双向数据绑定、依赖注入、模板、指令、MVC/MVVM 2、列举几种常见的...
    2e9a10d418ab阅读 1,249评论 0 10
  • 1、angularjs的几大特性是什么? 双向数据绑定、依赖注入、模板、指令、MVC/MVVM 2、列举几种常见的...
    秀才JaneBook阅读 1,536评论 0 22
  • Angular面试题 一、ng-show/ng-hide与ng-if的区别? 第一点区别是,ng-if在后面表达式...
    w_zhuan阅读 5,515评论 0 26
  • AngularJS是什么?AngularJs(后面就简称ng了)是一个用于设计动态web应用的结构框架。首先,它是...
    200813阅读 1,583评论 0 3
  • 1.背景介绍 以前原始社会,我们需要斧子,然后由于还没有社会分工,只能自己打磨一把来使用,对应在程序上是我们需要一...
    LMmx阅读 339评论 0 2