angularJS学习笔记二

angularJS四个特性

1.MVC 

<!doctype html>
<html ng-app>
    <head>
        <meta charset="utf-8">
    </head>
    <body>
        <div ng-controller="HelloAngular">
            <p>{{greeting.text}},Angular</p>
        </div>
    </body>
    <script src="js/angular-1.3.0.js"></script>
    <script src="HelloAngular_MVC.js"></script>
</html>

  

function HelloAngular($scope) {
    $scope.greeting = {
        text: 'Hello'
    };
}

  输出为:Hello,Angular

  ng-controller控制器绑定到HelloAngular函数,函数中定义了一个greeting对象,属性text值为'hello'

分析:

M:{{}}为模型

V:视图是能看得见的,当然是HTML咯

C:HelloAngular充当控制器

 

下面是demo,如果是新手,还是老老实实的把代码敲一遍比较好,毕竟俺们都是写代码的,不停地敲,不停地思考才能敲得更快,更好,bug更少!

上面是图片格式的,最下面为懒人准备了html

 

 

懒人场所

  1 <!DOCTYPE html>
  2 <html ng-app="myapp">
  3 
  4 <head>
  5     <script type="text/javascript" 
  6     src='http://apps.bdimg.com/libs/angular.js/1.3.9/angular.min.js'></script>
  7 </head>
  8 
  9 <body>
 10     <h3>写在前面的话</h3>
 11     <div>
 12         <pre>
 13 
 14                                                 angularjs简介
 15 
 16 AngularJS是为了克服HTML在构建应用上的不足而设计的,是一个用于设计动态web应用的javascript
 17 结构框架(区别于类库)。能够像backbone一样提供一整套方案用于设计web应用。
 18 
 19 HTML是一门很好的为静态文本展示设计的声明式语言,但要构建WEB应用的话它就显得乏力了。通常,
 20 我们是通过以下技术来解决静态网页技术在构建动态应用上的不足:
 21 
 22 1)类库 - 类库是一些函数的集合,它能帮助你写WEB应用。起主导作用的是你的代码,由你来决定何
 23 时使用类库。类库有:jQuery等。
 24 2)框架 - 框架是一种特殊的、已经实现了的WEB应用,你只需要对它填充具体的业务逻辑。这里框架
 25 是起主导作用的,由它来根据具体的应用逻辑来调用你的代码。框架有:knockout、sproutcore等。
 26 
 27 AngularJS使用了不同的方法,它尝试去补足HTML本身在构建应用方面的缺陷。AngularJS通过使用我们
 28 称为标识符(directives)的结构,让浏览器能够识别新的语法。例如:
 29     使用双大括号{{}}语法进行数据绑定;
 30     使用DOM控制结构来实现迭代或者隐藏DOM片段;
 31     支持表单和表单的验证;
 32     能将逻辑代码关联到相关的DOM元素上;
 33     能将HTML分组成可重用的组件。
 34 AngularJS是一个开源的web应用框架,由Google和社区进行维护,它可以创建单页的应用程序,一个页
 35 面的应用仅仅需要HTML,CSS和JavaScript在客户端。它的目标是增强页面的模型-视图-控制(MVC)的功能,为简化开发和测试。
 36 它通过双向数据绑定使你的UI(视图层)与你的JavaScript对象(层模型层)的数据自动同步。帮助你
 37 更好的构建你的应用和更方便的测试,AngularJs告诉浏览器如何依赖注入和控制反转。它帮助改良了允
 38 许异步回调和延迟、使客户端导航和深层链接使用哈希bang格式地址和HTML5 pushStat与服务端通信更容易。
 39 
 40 Angular 提供了:
 41     结构模型的引入(MVC,SPA等);
 42     增强HTML支持新特性;
 43     避免直接DOM操作来避免很难调试不可追踪的代码;
 44     包含低耦合和高可复用性;
 45     应用程序内部规则测试;
 46     视图模板更接近服务器端模板;
 47 设计初衷:
 48     将DOM操作从应用中解耦. 增强了可测试性.
 49     应用测试性与开发代码同样重要. 测试的复杂程度与代码的设计结构强相关.
 50     客户端与服务端解耦. 实现了并发处理机制增强了代码复用性.
 51     在开发全过程中作出指引: 从UI到业务逻辑最终到测试环节.
 52 
 53 
 54 
 55 
 56                                      angularjs关键特性
 57 1)双向数据绑定:
 58   数据绑定可能是AngularJS里最酷,最实用的功能。 它将节省你大量的样板代码编写。 一个典型的Web应用程序可以包含多达80%的代码基础,如遍历,操作,并听取了监听DOM。 数据绑定使得不用编写这些代码,这样你就可以专注于你的应用程序。
 59 2)模板
 60   在AngularJS,模板就是原生的HTML. 做了基于视图的增强. 这样做最大的好处在于拉近了开发与设计人员的工作流. 设计人员操作HTML完成设计,开发直接在HTML上作相应的功能开发。
 61 3)MVC
 62   AngularJS引入了软件设计的MVC模式.这对于使用者来说仁者见仁智者见智. AngularJS并不
 63 是完全的MVC而是 MVVM (Model-View-ViewModel).
 64 4)依赖注入
 65   AngularJS 提供了依赖注入的子系统帮助开发人员降低开发复杂度,提高测试效率.依赖注入将业务代码与配置实现解耦,提高了代码的可测性. 
 66   有了DI,无需每次都创建指定的对象依赖关系及后面配置. 这样就能按需分配而无需自己制
 67 定或是查找. 就像要说一句"Hey I need X',DI就会帮你创建并发送给你.
 68 
 69 采用依赖注入后能体验到的好处主要包括:
 70 代码更易于维护。
 71 API更为简练和抽象。
 72 代码更易于测试。
 73 代码更加模块化、可复用性更强。
 74 5)指令
 75   指令可以被用来创建自定义的HTML标签,这些标签可以用作新的自定义的控件。它们也可
 76 以用来"渲染"有一定行为的元素,也可以以一些有趣的方式来操作DOM属性。一个指令就是一个
 77 能引入新语法的东西。把分离的组件组合成一个组件,这种创建应用的方式将使得添加、修改
 78 和删除页面功能变得异常简单。指令是AngularJS的一个非常强大且独有的特性。
 79 
 80   从更高的层次说,  DOM 元素上的指令 (像是属性,元素名,注释或是 CSS ) 等给 
 81 AngularJS's HTML 编译器传递的数据($compile) 从而传递指定的功能到DOM元素或是子元素。
 82 
 83   Angular 有很多这样的内置指令,像是 ngBind, ngModel, 和ngView.Y还能自定义指令,当Angular启动后HTML编译器就会自动建立DOM元素的指令映射.
 84 6)测试
 85   AngularJS 意识到凡是js写的代码需要加强测试. 这在 AngularJS 设计之初就有了, 于是Angular的可测试性不言而喻.
 86   JS是解释性的动态语言,设计相应的测试决不可小觑.
 87   AngularJS 完全基于可测的根基设计出来的. 它提供了端到端的单元测试.
 88 摘自:http://www.admin10000.com/document/5121.html
 89 
 90 
 91 模块定义了一个应用程序。
 92 模块是应用程序中不同部分的容器。
 93 模块是应用控制器的容器。
 94 控制器通常属于一个模块。
 95 
 96 问题:函数会影响到全局命名空间
 97 大家应该经常性的会看到这句话,“JavaScript 中应避免使用全局函数”。因为他们很容易被
 98 其他脚本文件覆盖。
 99 AngularJS 模块让所有函数的作用域在改模块下,避免了该问题。
100 
101 模块的定义
102 var app = angular.module("myApp", []);s
103 在模块定义中 [] 参数用于定义模块的依赖关系。
104 中括号[]表示该模块没有依赖,如果有依赖的话会在中括号写上依赖的模块名字。
105 
106 什么时候载入库?
107 对于 HTML 应用程序,通常建议把所有的脚本都放置在 body 元素的最底部。
108 这会提高网页加载速度,因为 HTML 加载不受制于脚本加载。
109 在 body 元素中加载 AngularJS 库,必须放置在您的 AngularJS 脚本前面:
110         </pre>
111     </div>
112     <hr>
113     <h3>demo1 双向数据绑定</h3> Your name:
114     <input type="text" ng-model="yourname" 
115         placeholder="World"> Hello {{yourname || 'World'}}!
116     <hr>
117     <h3>demo2 ng-repeat循环输出</h3>
118     <div ng-app="" ng-init="name=[11,22,33]">
119         <p>循环对象</p>
120         <ul>
121             <li ng-repeat="i in name">{{i}}</li>
122         </ul>
123     </div>
124     <hr>
125     <h3>demo3 控制器双向数据绑定</h3>
126     <div ng-controller="funcf">
127 128         <input type="text" ng-model="firstname" />129         <input type="text" ng-model="lastname" />
130         <br /> name:{{ firstname +" "+ lastname }}
131     </div>
132     <script>
133     var myapp = angular.module('myapp', []);
134     myapp.controller('funcf', function funcf($scope) {
135         $scope.firstname = "X";
136         $scope.lastname = "y";
137     });
138     </script>
139     <hr>
140     <h3>demo4 过滤器</h3>
141     <div>
142         转换成小写
143         <input type="text" ng-model="enter">{{enter | lowercase}}
144         <br />
145         <br />
146         <!-- lowercase小写 uppercase大写 currency格式化数字为货币格式
147              filter从数组项中选择一个子集 orderBy根据某个表达式排列数组 -->
148         向指令添加过滤器
149         <input type="text" ng-model="test">模型test作为过滤关键字
150         <ul ng-init=" names = [{name:'b'},{name:'a'},{name:'c'}] ">
151             <li ng-repeat="i in names | filter:test | orderBy:'name' "
152                 >{{ $index +" "+i.name | uppercase}}</li>
153             <!-- $index应该是内置索引  -->
154         </ul>
155     </div>
156     <hr>
157     <h3>demo5 http</h3>
158     <div ng-controller="httpDemo">
159         <ul>
160             <li ng-repeat="i in names">{{i.Names}}</li>
161         </ul>
162         <script>
163         myapp.controller('httpDemo', function($scope, $http) {
164             var httpObj = 
165             $http.get("http://www.runoob.com/try/angularjs/data/Customers_JSON.php");
166             //这里当然会报错,因为这是w3cschool的例子,不是我自己的域名,受到js同源策略限制
167             httpObj.success(function(response) {
168                 $scope.names = response.records;
169                 console.log($scope);
170             });
171         });
172         </script>
173     </div>
174     <hr>
175     <h3>demo6 html DOM</h3>
176     <div ng-init="mySwitch=true">
177         <p>
178             <button ng-disabled="mySwitch">点一下</button>
179         </p>
180         <p>
181             <input type="checkbox" ng-model="mySwitch">选择</p>{{ mySwitch }}
182         <!-- ng-disabled 指令绑定应用程序数据 "mySwitch" 到 HTML 的 disabled 属性。
183              ng-model 指令绑定 "mySwitch" 到 HTML input checkbox 元素的内容(value)。
184          -->
185         <br />
186         <br /> ng-show
187         <p ng-show="true">你看得见我,看不见我兄弟</p>
188         <p ng-show="false">你看不见我,看得见我弟兄</p>
189         ng-hide
190         <p ng-hide="true">你看得见我,看不见我兄弟</p>
191         <p ng-hide="false">你看不见我,看得见我弟兄</p>
192     </div>
193     <hr>
194     <h3>demo7 事件</h3>
195     <div ng-init="count = 0">
196         <input type="button" ng-click="count = count + 1" value="计数器" />
197         <!-- 发现不能写为count+=1  -->
198         <p> {{count}} </p>
199     </div>
200 </body>
201 
202 </html>
View Code

 

posted @ 2015-09-29 11:55  beggarWang  阅读(232)  评论(0编辑  收藏  举报