angularJs 常用方法

一、常用的设计原则和设计模式

1、设计原则(明确)
① YANGI(You aren't gonna need it) 不写不需要的代码
②KISS(Keep it simple and stupid) 代码越简单越好
③DRY(Don't Repeat Yourself)封装代码
④高内聚低耦合
内聚:一个模块内部的不同部分之间的关系
耦合:不同模块/组件的关系
⑤SRP(single responsibility principle) 单一责任原则
⑥OCP(open closed principle) 开闭原则
对扩展开放 对修改关闭
⑦LCP(least knownledge principle) 最少知识法则


2、设计模式(23种 了解)
总体来说设计模式分为三大类:

①创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。

②结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。

③行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。


经常用到的设计模式:
工厂方法模式、单例模式、适配器模式、解释器模式、观察者模式

MVC、MVVM、MVP。。。--》终极目标:模块化和复用

MVC:
Model(模型数据)、View(视图)、Controller(控制器)

遥控器--》控制器:数据的增删改查的操作
电视 --》View:展示数据
光缆 --》Model:模型数据

why MVC?
解耦(降低代码的耦合度)、职责的切分。。。。

工作原理:当对视图操作的时候,触发控制器中的一些方法,在这些方法中对于数据的增删改查的操作,借助一些绑定显示,更新到视图。


二、认识AngularJS

1、什么是AngularJS
ng是一个由Google维护的开源的框架,实现单页面应用程序,适用于数据操作比较频繁的场景

2、为什么AngularJS
四大特征:
①采用了MVC的设计模式
②双向数据绑定
③依赖注入
④模块化设计

3、怎么使用?
引入对应的js文件。

3.1 表达式
语法:{{表达式}}
作用:将表达式的结果输出到调用该表达式的元素的innerHTML中

练习:新建一个html文件,在文件中,通过双花括号语法执行算术运算、比较运算、逻辑运算、三目运算。

 1 <!DOCTYPE html>
 2 <html>
 3 <head lang="en">
 4     <meta charset="UTF-8">
 5     <script src="js/angular.js"></script>
 6     <title></title>
 7 </head>
 8 <body ng-app>
 9     <h1>Hello AngularJs</h1>
10     <p>加:3+5 = {{3+5}}</p>
11     <p>减:3-5 = {{3-5}}</p>
12     <p>乘:3*5 = {{3*5}}</p>
13     <p>余:3/5 = {{3/5}}</p>
14     <p>比较:3>5 = {{3>5}}</p>
15     <p>比较:3>=5 = {{3>=5}}</p>
16     <p>比较:3<5 = {{3<5}}</p>
17     <p>比较:3<=5 = {{3<=5}}</p>
18     <p>三目:3<=5?3+5:3-5 结果为:{{3<=5?3+5:3-5}}</p>
19     <p>三目:3<=5 结果为:{{3<=5?'yes':'no'}}</p>
20     <p>逻辑:3<5 && 5<6 结果为:{{3<5 && 5<6}}</p>
21     <p>逻辑:3>5 && 5<6 结果为:{{3>5 && 5<6}}</p>
22     <p>逻辑:3<5 || 5<6 结果为:{{3<5 || 5<6}}</p>
23     <p>逻辑:3>5 || 5>6 结果为:{{3>5 || 5>6}}</p>
24 </body>
25 </html>

 

3.2 指令
ngApp指令:①指定angularJS的作用范围②自动载入并启动ng应用

ngInit指令:初始化一些变量(对象、数组。。。),注意:不需要写上var关键字
语法:<ANY ng-init=""></ANY>

练习:ngInit指令创建一个对象数组(学生数组),模拟4个对象,每个对象包含name、sex、score;将对象数组输出到一个table中。

 1 <!DOCTYPE html>
 2 <html>
 3 <head lang="en">
 4     <meta charset="UTF-8">
 5     <script src="js/angular.js"></script>
 6     <title></title>
 7     <style>
 8         table{
 9             width:80%;
10             border-collapse: collapse;
11             margin:0 auto;
12         }
13         h1,table>tbody>tr{
14             text-align:center;
15         }
16         table tr,td,th{
17             border:1px solid #ddd;
18         }
19     </style>
20 </head>
21 <body ng-app>
22     <span ng-init="name='angular'">{{name}}</span>
23     <p>{{name}}</p>
24     <span ng-init="name='angular';ages='18'">{{name}}</span>
25     <p>{{name}} {{ages}}123</p>
26     <sapn ng-init="heoro={name:'二狗子',age:'15'}"></sapn>
27     <p>{{heoro.name}}</p>
28     <p>name:{{heoro.name}} age:{{heoro.age}}</p>
29     <span ng-init="arr=[20,30,40,50,60]"></span>
30     <p>{{arr[2]}}</p>
31     <span ng-init="student=[
32     {name:'二狗子',sex:'男',score:'80'},
33     {name:'张三丰',sex:'男',score:'90'},
34     {name:'孙悟空',sex:'雄',score:'60'},
35     {name:'白骨精',sex:'女',score:'77'},
36     {name:'琵琶精',sex:'女',score:'83'}
37     ]"></span>
38     <h1>学生信息表</h1>
39     <table>
40         <thead>
41         <tr>
42             <th>姓名</th>
43             <th>性别</th>
44             <th>成绩</th>
45         </tr>
46         </thead>
47         <tbody>
48         <tr>
49             <td>{{student[0].name}}</td>
50             <td>{{student[0].sex}}</td>
51             <td>{{student[0].score}}</td>
52         </tr>
53         <tr>
54             <td>{{student[1].name}}</td>
55             <td>{{student[1].sex}}</td>
56             <td>{{student[1].score}}</td>
57         </tr>
58         <tr>
59             <td>{{student[2].name}}</td>
60             <td>{{student[2].sex}}</td>
61             <td>{{student[2].score}}</td>
62         </tr>
63         <tr>
64             <td>{{student[3].name}}</td>
65             <td>{{student[3].sex}}</td>
66             <td>{{student[3].score}}</td>
67         </tr>
68         </tbody>
69     </table>
70 </body>
71 </html>

 

步骤:
①引入js文件,指定ngApp指令
②通过ngInit初始化数据
③将数据展示在table中。

 

ngApp/ngInit
注意事项:ngInit来初始化变量的时候,如果需要初始化多个变量,只需要通过‘;’来隔开
<span ng-init="name='lucy';age=20">{{name}}</span>

ngApp指令ng应用的作用范围,如果ngApp调用了多次,只有第一次是生效的。

三、ng常用的指令

ng中的指令:是由AngularJS提供的,可以将指令用在HTML中作为扩展属性、扩展标签

扩展属性用法:<ANY ng-xx=""></ANY>
扩展标签用法:<ngView></ngView>

1、ngBind
用法: <ANY ng-bind=“”></ANY>
双花括号 -》表达式的结果输出到调用元素的innerHTML中。
ngBind 将表达式的结果输出到调用元素的innerHTML中,但是相对于{{}},解决在ng启动较慢时,{{}}闪烁的问题。

2、ngRepeat指令
为HTML添加循环功能
语法1:<ANY ng-repeat="临时变量 in 集合"></ANY>
语法2:<ANY ng-repeat="(下标变量名,值变量名) in 集合"></ANY>

用途:对于指定的集合的每个成员,依次赋值给临时变量,将当前元素循环输出一遍。

$index/$first/$middle...

练习:学生数组 ngInit初始化,通过ngRepeat遍历对象数组并显示在table中。

 1 <!DOCTYPE html>
 2 <html>
 3 <head lang="en">
 4     <meta charset="UTF-8">
 5     <script src="js/angular.js"></script>
 6     <title></title>
 7     <style>
 8         ul,ol{
 9             list-style: none;
10         }
11         table{
12             width:80%;
13             border-collapse: collapse;
14             margin:0 auto;
15         }
16         h1,table>tbody>tr{
17             text-align:center;
18         }
19         table tr,td,th{
20             border:1px solid #ddd;
21         }
22     </style>
23 </head>
24 <body ng-app>
25     <h1>angular ng-repeat</h1>
26     <ul ng-init="list=[1,2,3,4,5,6,7,8,9]">
27         <li ng-repeat="tmp in list">{{tmp}}</li>
28     </ul>
29     <ol>
30         <li ng-repeat="(key,value) in list">{{'key is '+key+' value is '+value}}</li>
31     </ol>
32     <hr/>
33     <span ng-init="student=[
34     {name:'二狗子',sex:'男',score:'80'},
35     {name:'张三丰',sex:'男',score:'55'},
36     {name:'孙悟空',sex:'雄',score:'60'},
37     {name:'白骨精',sex:'女',score:'50'},
38     {name:'琵琶精',sex:'女',score:'83'}
39     ]"></span>
40     <h1>学生信息表</h1>
41     <table>
42         <thead>
43         <tr>
44             <th>姓名</th>
45             <th>性别</th>
46             <th>成绩</th>
47         </tr>
48         </thead>
49         <tbody>
50         <!--<tr ng-repeat="stu in student">-->
51             <!--<td>{{stu.name}}</td>-->
52             <!--<td>{{stu.sex}}</td>-->
53             <!--<td>{{stu.score}}</td>-->
54         <!--</tr>-->
55         <!--<tr ng-repeat="obj in student">-->
56             <!--<td ng-repeat="tmp in obj">{{tmp}}</td>-->
57         <!--</tr>-->
58         <tr ng-repeat="obj in student">
59             <td ng-repeat="tmp in obj" ng-bind="tmp"></td>
60         </tr>
61         </tbody>
62     </table>
63 </body>
64 </html>

 

3、ngIf指令
为HTML添加选择功能
语法:<ANY ng-if="表达式"></ANY>
用途:表达式的结果为true,当前元素会挂到DOM树,否则删除。

练习:通过ngIf指令将对象数组中,成绩大于60分的显示在table中。

 1 <!DOCTYPE html>
 2 <html ng-app>
 3 <head lang="en">
 4     <meta charset="UTF-8">
 5     <script src="js/angular.js"></script>
 6     <title></title>
 7     <style>
 8         table{
 9             width:80%;
10             border-collapse: collapse;
11             margin:0 auto;
12         }
13         h1,table>tbody>tr{
14             text-align:center;
15         }
16         table tr,td,th{
17             border:1px solid #ddd;
18         }
19     </style>
20 </head>
21 <body>
22     <span ng-init="student=[
23     {name:'二狗子',sex:'男',score:'80'},
24     {name:'张三丰',sex:'男',score:'55'},
25     {name:'孙悟空',sex:'雄',score:'60'},
26     {name:'白骨精',sex:'女',score:'50'},
27     {name:'琵琶精',sex:'女',score:'83'},
28     {name:'猪八戒',sex:'男',score:'73'},
29     {name:'沙悟净',sex:'男',score:'35'}
30     ]"></span>
31     <h1>学生信息表</h1>
32     <table>
33         <thead>
34         <tr>
35             <th>姓名</th>
36             <th>性别</th>
37             <th>成绩</th>
38         </tr>
39         </thead>
40         <tbody>
41         <tr ng-repeat="obj in student" ng-if="obj.score >= 60">
42             <td ng-repeat="tmp in obj" ng-bind="tmp"></td>
43         </tr>
44         </tbody>
45     </table>
46 </body>
47 </html>

 

4、ngShow/ngHide

语法:<ANY ng-show="表达式"></ANY>
用途:根据表达式输出结果,true-》显示 false-》隐藏

ng-show

 1 <!DOCTYPE html>
 2 <html ng-app>
 3 <head lang="en">
 4     <meta charset="UTF-8">
 5     <script src="js/angular.js"></script>
 6     <title></title>
 7 </head>
 8 <body>
 9     <span ng-init="hasmore=true"></span>
10     <button ng-show="hasmore">点我,加载更多</button>
11 </body>
12 </html>

ng-hide

 1 <!DOCTYPE html>
 2 <html ng-app>
 3 <head lang="en">
 4     <meta charset="UTF-8">
 5     <script src="js/angular.js"></script>
 6     <title></title>
 7 </head>
 8 <body>
 9     <span ng-init="hasmore=false"></span>
10     <button ng-hide="hasmore">没有更多内容了</button>
11 </body>
12 </html>

 


语法:<ANY ng-hide="表达式"></ANY>
用途:根据表达式输出结果,true-》隐藏 false-》显示

5、ngSrc
语法:<img ng-src='{{url}}'/>

 1 <!DOCTYPE html>
 2 <html ng-app>
 3 <head lang="en">
 4     <meta charset="UTF-8">
 5     <script src="js/angular.js"></script>
 6     <title></title>
 7 </head>
 8 <body>
 9     <span ng-init="url='img/1.jpg'"></span>
10     <img ng-src="{{url}}"/>
11 </body>
12 </html>

 


四、AngularJS如何实现MVC
M: model 模型数据:js定义的变量
V: view 视图:增强过后的html,显示数据
C: controller 控制器,负责数据的操作,function来处理


步骤:
①声明一个模块
var app = angular.module('模块名','依赖列表');
②注册模块:ng-app='模块名'
③声明控制器: app.controller('控制器名字',function(){})
④调用控制器:ng-controller='控制器名字'
⑤操作:操作模型数据($scope.name='xiaofang'
⑥显示 (<p>{{name}}</p>)
在控制器的范围内,通过ng指令或者双花括号语法来显示数据


$scope是一个控制器的作用域对象,服务service,单例模式的对象)

事件:
单击事件 ngClick--》 <button ng-click='show()'></button>
ngDblClick
ngMouseEnter/Leave...


练习:
使用angularJS的MVC的设计模式,来实现一个加载更多的列表。
分析:
①创建模块、控制器、模型数据(对象数组)
②将模型数据通过ngRepeat显示在ul中
③按钮通过ng-click指定点击的回调:对象数组push两条数据

两种方法:①ngInit 耦合度比较高 ②$scope
初始化模型数据:通过控制器的$scope来实现。

 1 <!DOCTYPE html>
 2 <html ng-app="myMoudle">
 3 <head lang="en">
 4     <meta charset="UTF-8">
 5     <script src="js/angular.js"></script>
 6     <title></title>
 7     <style>
 8         div{
 9             width: 850px;
10             margin:0 auto;
11         }
12         table{
13             width:60%;
14             border-collapse: collapse;
15         }
16         table td{
17 
18             text-align: center;
19         }
20         table tr,td,th{
21             border:1px solid #ddd;
22         }
23     </style>
24 </head>
25 <body>
26     <div ng-controller="myCtrl">
27         <p>
28             <button ng-click="addInput()">添加</button>
29         </p>
30         <div id="add" ng-show="isShow">
31             <label for="price">单价:</label>
32             <input type="text" placeholder="请输入单价" id="price"/><br>
33             <label for="count">数量:</label>
34             <input type="text" placeholder="请输入数量" id="count"/><br>
35             <input type="button" value="确定" ng-click="addShopp()"/>
36         </div>
37         <table>
38             <thead>
39                 <tr>
40                     <th>单价</th>
41                     <th>数量</th>
42                     <th>小计</th>
43                     <th>删除</th>
44                 </tr>
45             </thead>
46             <tbody>
47                 <tr ng-repeat="obj in shoppList">
48                     <td ng-repeat="tmp in obj" ng-bind="tmp"></td>
49                     <td ng-bind="obj.price*obj.count"></td>
50                     <td><button ng-click="deleteShopp()">删除</button></td>
51                 </tr>
52             </tbody>
53             </table>
54     </div>
55     <script>
56         var app = angular.module('myMoudle',['ng']);
57         app.controller('myCtrl',function($scope){
58             $scope.shoppList=[
59                 {price:3,count:3},
60                 {price:8,count:3},
61                 {price:1,count:3},
62                 {price:6,count:3}
63             ];
64             $scope.isShow = false;
65             $scope.addInput=function(){
66                 $scope.isShow = true;
67             }
68             $scope.addShopp=function(){
69                 var pri = price.value;
70                 var coun = count.value;
71                 if(pri!='' && coun !=''){
72                     $scope.shoppList.push(
73                             {price:pri,count:coun}
74                     );
75                     $scope.isShow = false;
76                     alert('添加成功!!!');
77                 }
78                 else{
79                     alert("价格和数量不能为空!!!");
80                 }
81             }
82             $scope.deleteShopp=function(){
83                console.log(this.$index);
84                 $scope.shoppList.splice(this.$index,1);
85             }
86         });
87     </script>
88 </body>
89 </html>

 

ngDisabled
ngChecked

ngStyle/ngClass...

ng-checked示例

 1 <!DOCTYPE html>
 2 <html ng-app="myModule">
 3 <head lang="en">
 4     <meta charset="UTF-8">
 5     <script src="js/angular.js"></script>
 6     <title></title>
 7 </head>
 8 <body>
 9     <div ng-controller="myCtrl">
10         <input type="checkbox" ng-checked="checked"/>是否同意
11     </div>
12     <script>
13         var app = angular.module('myModule',['ng']);
14         app.controller('myCtrl',function($scope){
15             $scope.checked=false;
16         });
17     </script>
18 </body>
19 </html>

 



posted @ 2016-12-26 20:20  时间脱臼  阅读(331)  评论(0)    收藏  举报