《用AngularJS开发下一代Web应用》读书笔记①:AngularJS简介

IMG_20161118_181453_HDR.jpg

开篇是技术框架惯例的吹牛逼时间,建议略过

  • 在创建优质的web应用方面,Angular团队致力于减轻开发人员在开发Ajax应用过程中的痛苦。
  • 编写web应用的过程中,我们希望使用这样的一个前端框架来构建:使用简单,易于理解,同时当web应用变得复杂时,依然能易于测试、扩展和维护。更希望能一边编写代码,一边看到代码的效果,而不是为了满足浏览器内部的奇怪运行机制,频繁修改(兼容性)。
  • AngularJS框架已经实现以上的目标,这得益于Angular周边的开源社区,读者可以在GitHub上获取更多大型的、复杂的案例。 ( AngularJS GitHub页面

介绍一些AngularJS框架中涉及到的概念

客户端模板

  • 类似Rails、PHP和JSP等传统的web应用(多页面应用)是将构建好的HTML页面整个返回给浏览器。而Ajax应用(单页面应用)是只向服务器请求数据,在浏览器端把HTML模板与字符串组合起来,最后把结果插入DOM中,实现DOM的局部内容刷新。
  • AngularJS是在Ajax的基础上进行了封装和简化(使得页面模板的定义可以直接在HTML中进行,不需要在Java或JavaScript中编写HTML代码)
<!DOCTYPE html>
<!-- 1.通过ng-app设置Angular管理的范围 -->
<html ng-app="myApp">
    <head>
        <meta charset="UTF-8">
        <title>AngularJS Hello World</title>
    </head>
    <!-- 2.引入Angular的文件 -->
    <script src="http://cdn.static.runoob.com/libs/angular.js/1.4.6/angular.min.js"/>
    <body>
        <!-- 3.通过ng-controller定义控制器 -->
        <div ng-controller="HelloController">
            <!-- 4.嵌套花括号的方式执行angular表达式 --> 
            <h3 class="show">{{text}},World</h3>
        </div>
    </body>
    <!-- 5.编写控制器的实现细节 -->
    <script type="text/javascript">
        var app = angular.module('myApp', []);
        app.controller('HelloController', function($scope) {
            $scope.text = "Hello";  //初始值
        });
    </script>
</html>

Model View Controller(MVC)

  • MVC背后的核心理念是:把管理数据的代码(model)、应用逻辑代码(controller),以及向用户展示数据的代码(view)清晰的分离开来。
  • 理想的代码流程是:
    • 视图从模型中获取数据,展示给用户;
    • 当用户进行界面交互时,控制器会做出响应并修改模型中的数据;
    • 最后,模型会通知视图,数据已经发生了变更,视图再刷新显示的内容;
  • 在angular应用中,视图就是DOM,控制器是自定义的JavaScript函数,而模型数据则被存储在$scope对象中。
  • 通过MVC来组织代码,会让你的web应用更加易于扩展、维护和测试。更重要的,MVC是一个思想上的模型,编写MVC标准的代码,能让其他开发者一眼看懂所写的代码,减少沟通成本。

数据绑定

  • 上面提到过Ajax应用通过hisinnerHTML的方式将更新的HTML字符串插入到DOM,实现局部刷新。但如果需要频繁更新数据,或者根据用户输入来修改数据的时候,则需要做很多及其繁杂的工作来保证数据的状态是正确的,并且UI和JavaScript属性要同时正确。
  • AngularJS通过数据绑定,让数据自己去同步。并且这一机制,对来自服务器的数据,同样有效。
<!DOCTYPE html>
<!-- 1.通过ng-app设置Angular管理的范围 -->
<html ng-app="myApp">
    <head>
        <meta charset="UTF-8">
        <title>AngularJS Hello World</title>
    </head>
    <!-- 2.引入Angular的文件 -->
    <script src="http://cdn.static.runoob.com/libs/angular.js/1.4.6/angular.min.js"></script>
    <body>
        <!-- 3.通过ng-controller定义控制器 -->
        <div ng-controller="HelloController">
            <!-- 4.ng-model进行数据模型绑定 -->
            <input ng-model='text' />
            <!-- 5.嵌嵌套花括号的方式执行angular表达式 -->    
            <h3 class="show">{{text}},World</h3>
        </div>
    </body>
    <!-- 5.编写控制器的实现细节 -->
    <script type="text/javascript">
        var app = angular.module('myApp', []);
        app.controller('HelloController', function($scope) {
            $scope.text = "";   //初始值
        });
    </script>
</html>

效果:


数据绑定案例

依赖注入

  • 上面通过$scope对象获取数据,但我们并不需要调用函数去创建这个对象。除了$scope对象之外,Angular还提供了很多对象来做一些很酷的事情,比如通过$location访问原生的window对象。这些都是通过Angular的依赖注入机制实现的。
  • 依赖注入机制遵循迪米特法则的设计模式,我们的类知识简单的获取它们所需要的东西,而不需要创建那些它们所依赖的东西。

迪米特法则,也叫做最少知识原则,核心含义是一个类要尽量少地知道其他类的相关信息。

指令

  • Angualr最强大的功能之一就是可以把模板写成HTML的形式,这是由于内置的DOM转换引擎,通过该引擎扩展HTML的语法。
  • 例如,通过花括号{{text}}进行双向数据绑定,通过ng-controller用来指定控制器,通过ng-model将输入数据绑定到模型中的属性,这些都是HTML扩展指令。
  • 不仅限于Angular内置的指令,甚至还可以编写自定义的指令来扩展HTML模板的功能。

入门实例:购物车

<!DOCTYPE html>
<!-- 通过ng-app设置Angular管理的范围 -->
<html ng-app="myApp">
    <head>
        <meta charset="UTF-8">
        <title>AngularJS Shopping Cart</title>
    </head>
    <style type="text/css">
        span{border: 1px solid #CCCCCC;}
        .bookItem{margin-bottom: 15px;}
        .bookName{font-weight: bold;}
        .bookPrice{width: 28px;text-align: center;}
    </style>
    <!-- 引入Angular的文件 -->
    <script src="http://cdn.static.runoob.com/libs/angular.js/1.4.6/angular.min.js"></script>
    <body ng-controller='CartController'>
        <h2>你的购物车</h2>
        <!-- 通过ng-repeat遍历数据模型,并复制DOM结构 -->
        <div ng-repeat='item in items' class="bookItem">
            <!-- 获取数据模型中的属性值放入DOM结构 -->
            <div class="bookName">{{item.title}}</div>
            <!-- ng-model把数据模型和输入框绑定关系 -->
            <input ng-model='item.quantity' class="bookPrice"/>
            <span>单价:{{item.price}}元</span>
            <span>总价:{{item.price * item.quantity}}元</span>
            <button ng-click="remove($index)">移除</button>
        </div>
    </body>
    <!-- 在自定义控制器中实现业务细节 -->
    <script type="text/javascript">
        var app = angular.module('myApp', []);
        app.controller('CartController', function($scope) {
            //虚拟数据
            $scope.items = [
                {
                    title : 'JavaScript性能优化:度量、监控与可视化',
                    quantity : 1,
                    price : 40.40
                },
                {
                    title : 'HTML5基础知识 核心技术与前沿案例',
                    quantity : 2,
                    price : 59.30
                },
                {
                    title : 'ES6标准入门',
                    quantity : 1,
                    price : 58.70
                }
            ];
            //移除方法
            $scope.remove = function(index){
                $scope.items.splice(index,1);
            };
        });
    </script>
</html>

效果:


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

推荐阅读更多精彩内容