Angular 1.x 精华一页纸

AngularJS/Vue/React 都是通过JS利用H5自定义标签和属性的能力,提供一些指令和逻辑控制,实现界面逻辑。所以他们在很多设计方面都有相似点。

JS部分

var app = angular.module('myApp', []);

app.controller('myCtrl', function($scope) {

$scope.firstName= "John";

$scope.lastName= "Doe";

});

使用模块定义应用app,并创建controller控制器

如果有依赖模块,angular.moduel('myApp',['依赖的模块']);

II、作用域 $scope 控制器controller和 HTML5元素 交互的中介

可以在 $scope 中定义数据/函数,然后在 HTML5 元素中使用;反过来,也可以通过 $scope 引用HTML5 中的因素

a、每个controller 都有一个 $scope

b、全局有一个 $rootScope,各个控制器直接如果想共享数据则通过 $rootScope

app.controller('myCtrl', ['$scope','$rootScope',function($scope,$rootScope) {

$scope.firstName= "John";

$scope.lastName= "Doe";

$scope.inc = function(){

}

}]);

2、概念

I、参数 - 数据存取

{{ 变量名 }}

支持表达式操作

{{ Number + 1}}

{{ firstName + '-' + lastName }}

{{ i > 0 ? 1 : 0}}

II、逻辑控制

a、迭代

  • {{ x.name + ', ' + x.country }}

    b、条件判断

    可以控制当前的元素是否出现

    经典的表格处理

    {{ x.Name }}

    {{ x.Name }}

    {{ x.Country }}

    {{ x.Country }}

    从基本页面逻辑处理看,angularJS和Vue的用法是一致的。

    3、绑定

    I、模型ng-model - 表单数据绑定 (双向绑定)

    其实,双向绑定非常类似 Java中的 JavaBean ,JavaBean的变化影响到具体的展示,同样具体的展示也会影响JavaBean的值,典型的应用比如在ORM中,或者JSP中

    输入你的名字:

    $scope.text = [];

    II、数据绑定/元素绑定 ng-bind

    剩余字数:

    -- 这个例子是两者使用区别最直观的,ng-model 绑定一个参数,然后在js中使用(也可以反向影响),这里的HTML的value是 主动触发的,ng-bind 从 js提供一个方法/值, HTML 的值是被动使用的

    ng-bind是从$scope -> view的单向绑定

    ng-modle是$scope <-> view的双向绑定

    从绑定数据来看,angularJS和Vue也是一致的。

    4、逻辑-事件-控制

    前面没有展开来说,从这里详细描述一下

    a、从作用域来说,Vue并没有做明确说明,可以认为是一个Vue对象就是一个作用域;而angularJS 则定义了scope作用域和普通js数据区分开来

    b、显式的在 模块基础上 定义了 控制器,这是Vue没有的

    c、把 方法 分为 控制器和服务,做了区分, 控制器需要 DI 依赖注入(这是Spring的设计理念也用在这里)服务才能使用,这点 Vue 也没有做特殊处理

    从这些来看,angularJS 要比 Vue 复杂的多

    更多依赖注入的问题,后面再详细描述

    I、ng-xxx指令+ 控制器方法

    隐藏/显示

    名:

    姓:

    姓名: {{firstName + " " + lastName}}

    var app = angular.module('myApp', []);

    app.controller('personCtrl', function($scope) {

    $scope.firstName = "John";

    $scope.lastName = "Doe";

    $scope.myVar = false;

    $scope.toggle = function() {

    $scope.myVar = !$scope.myVar;

    }

    });

    II、其他方法

    过滤器

    AngularJS 使用了 管道符 | 用来过滤数据 -- 和Linux类似,Vue也类似

    filter -- 选择子集

    lowerCase/uppercase -- 大小写转换

    orderBy -- 排序

    currency -- 转换为货币形式

  • {{ (x.name | uppercase) + ', ' + x.country }}

    5、表单元素

    同Vue一样,通过 ng-model 绑定数据

    比如文本输入框:

    Last Name:

    6、组件化

    angularJS通过自定义指令来实现组件化的功能,和Vue的自定义指令不是一个概念。

    I、典型例子

    var app = angular.module("myApp", []);

    app.directive("caption", function() {

    return {

    template : '{{x.name}}'

    };

    });

    循环对象:

    • {{ x.name + ', ' + x.country }}

      II、组件化的步骤

      一、注册一个组件

      a、定义组件 通过模块的指令 app.directive("caption", function(){});

      b、定义组件类型 restrict: 'E', 指定是 属性还是标签

      c、定义控制器,里面定义一些逻辑

      d、编译 complie 方法,在模版替换的各个生命周期阶段,可以有回调函数

      二、使用 template 进行替换 标签元素

      三、父控件(外层) 传递数据给 子控件(内层),通过 在 scope中定义的 属性,可以直接把数据传给内层

      四、子控件(内层) 传递数据给父控件(外层),通过事件来传递

      使用 scope.$broadcast 把事件广播出去, scope.$on 监听事件

      使用 scope.$watch 触发事件

      其中,二、三、四步,angularJS和Vue极其相似,只是在第一步,angularJS 明显复杂很多

      define(['angular','bootstrap','css!test.style.control'], function() {

      var showpane = angular.module('test.app.control',[])

      showpane.directive('testShowpane', function() {

      return {

      restrict: 'E',

      transclude: true,

      scope: {

      data : '=',

      },

      controller: [ "$scope", function(scope) {

      var scrolls = scope.scrolls = scope.data;

      console.log(scrolls);

      }],

      compile: function(tEle, tAttrs) {

      console.log(tEle.html());

      return {

      pre: function(scope, iElem, iAttrs){

      console.log('pre link => ' + iElem.html());

      },

      post: function(scope, iElem, iAttrs){

      console.log('post link => ' + iElem.html());

      _link(scope, iElem, iAttrs);

      }

      }

      },

      template:

      '

      \

      \

      {{scroll.title}}
      \

      \

      \

      \

      \

      \

      {{scroll.valuedisp}}
      \

      \

      \

      ',

      replace: true

      };

      function _link(scope, iElem, iAttrs){

      function percentHeight(num){

      return (Math.round(1 / num * 10000) / 100.00 + "%");

      }

      scope.$watch('data', function(newValue,oldValue) {

      if (scope.data) {

      scope.heightStyle = "height:" + percentHeight(newValue.length) +";";

      scope.$broadcast("datachange", newValue);

      }

      }, true);

      scope.$on('datachange',function (event, msg) {

      console.log(msg);

      });

      }

      });

      return showpane;

      });

      7、其他

      I、ng-option 下拉框

      II、表单验证

      所有表单都有 这几个属性,以及对应的方法验证 $dirty/$invalid/$error

      III、全局API

      比较 isArray/ isDate/ isNumber ...

      转换 formJSON /toJSON 可以把Json序列化成字符串,也可以把字符串反序列化成 Json

      迭代 foreach

      系统 bootstrap 启动/ element 获取 HTML DOM

      其他常见指令

      IV、控制元素可视化 ng-disabled/ng-show/ng-hidd

      V、包含文件

      --模块话的一种方式,把重复的代码在这里模块化

      完整的angular 组件化 例子可以见参见《完整的客户端组件化案例 angularJS + requireJS

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

      推荐阅读更多精彩内容

      • AngularJS是什么?AngularJs(后面就简称ng了)是一个用于设计动态web应用的结构框架。首先,它是...
        200813阅读 1,590评论 0 3
      • ng-model 指令ng-model 指令 绑定 HTML 元素 到应用程序数据。ng-model 指令也可以:...
        壬万er阅读 863评论 0 2
      • Angular面试题 一、ng-show/ng-hide与ng-if的区别? 第一点区别是,ng-if在后面表达式...
        w_zhuan阅读 5,519评论 0 26
      • 通过AngularJS仿豆瓣一刻的案例:https://github.com/zhongxiaolian/doub...
        中小恋阅读 1,750评论 1 21
      • 昨天晚上快要睡觉了,段小姐发来微信说,乔任梁死了,她喜欢了那么多年的人,从好男儿开始,还偷偷给他投过票,可还没来得...
        李坚强说她只想做自己阅读 367评论 0 0