angularJs 常用知识点总结 自定义模块 ngRoute 单页面 代码片段进行传参 动态引入页头页尾 Animation 动画 表单

ng四大特征:
①采用了MVC的设计模式
②双向数据绑定(view和model)
③依赖注入
④模块化设计

一、如何自定义模块并进行调用??

自定义模块:angular.module()
模块之间如何相互之间的调用: angular.module('myApp02',['ng','myApp01']);


模块化好处:体现“高内聚低耦合”的设计原则,提高代码的复用率,降低测试难度。

模块分类:
①ng官方提供的模块
ng\ngAnimate\ngRoute\ngTouch...
②用户自定义的模块
angular.module();

二、ng包含哪些模块
一个angularJS的模块可以包含哪些组件??
①controller:维护模型数据
②directive:用在view中 输出/绑定Model数据
③function:forEach\toJson\fromJson
④filter:结果的筛选、过滤、格式化
⑤service:提供变量或者方法的服务
。。。


三、SPA应用以及通过ngRoute来实现的方式

单页面应用的工作原理:
①url
http://127.0.0.1/index.html#/路由地址
②浏览器请求index.html,解析路由地址
③查找路由词典,#/start ==>tpl/start.html
④获取当前路由地址 对应的真实模板的地址 start.html
⑤发起ajax请求,获取目标模板页面,将服务器返回的代码片段,插入到当前的DOM树,实现局部刷新

 

使用ngRoute模块来实现SPA应用的基本步骤:
①创建完整的HTML页面 index.html,引入angular.js,angular-route.js
②创建自定义的模块,指定依赖于ng\ngRoute
③指定容器,盛放代码片段 ngView
④创建模板页面
⑤配置路由词典
$routeProvider.when('/start',{
templateUrl:'tpl/start.html',
controller:'startCtrl'})
⑥测试在地址栏中 输入不同的路由地址的时候,能否将代码片段加载进来。

四、代码片段之间的跳转

模板页面之间 执行跳转的3种方式:
①直接修改地址栏中的url
②使用超链接 <a href='#/路由地址'></a>
③$location.path('/路由地址')

如果有多个代码片段,都需要通过js的方式来跳转,为每个代码片段去创建控制器 去定义jump方法,这个是不合理的,可以这么处理:借助父控制器定义方法,然后让子控制器去调用。

配置代码片段的控制器的方式:
①ng-controller
②配置路由词典设置
$routeProvider.when('/myLogin',{
templateUrl:'tpl/login.html',
controller:'loginCtrl'
});

 


使用ngRoute来实现一个SPA应用。
创建一个完整的html--》index.html;创建2个代码片段 --》start.html register.html
start.html --> 点击按钮跳转到register,
register.html -->a 跳转到start.html


从register跳转到start

index.html 代码如下:

 1 <!DOCTYPE html>
 2 <html ng-app="myApp">
 3 <head lang="en">
 4     <meta charset="UTF-8">
 5     <script src="js/angular.js"></script>
 6     <script src="js/angular-route.js"></script>
 7     <title></title>
 8 </head>
 9 <body ng-controller="myCtrl2">
10 <!--  指定盛放代码片段的容器 -->
11     <div ng-view>
12 
13     </div>
14     <script>
15 //        创建模块时指定依赖 ng和nhRoute
16         var app = angular.module('myApp',['ng','ngRoute']);
17 //          配置路由词典
18         app.config(function ($routeProvider) {
19             $routeProvider
20                     .when('/myLogin', {
21                         templateUrl: 'tpl/start.html',
22                         controller:'myCtrl'
23                     })
24                     .when('/myMain', {
25                         templateUrl: 'tpl/register.html'
26                     })
27                     .otherwise({redirectTo: '/myLogin'});
28         });
29         app.controller('myCtrl',['$scope','$location',function($scope,$location){
30             $scope.numb = 10;
31             $scope.jump = function () {
32                 $location.path('/myMain');
33             }
34         }])
35         app.controller('myCtrl2',['$scope','$location',function($scope,$location){
36             $scope.jump = function(target){
37                 $location.path(target);
38             }
39         }])
40     </script>
41 </body>
42 </html>

start.html 代码如下:

1 <!--<div ng-controller="myCtrl">-->
2     <h1>页面1</h1>
3     <p>{{numb}}</p>
4     <a href="#/myMain">跳转带哦页面二</a>
5     <p><button ng-click="jump()">跳转带哦页面二</button></p>
6     <p><button ng-click="jump('/myMain')">跳转带哦页面二(带参数跳转)</button></p>
7 <!--</div>-->

 

register.html代码如下:

 

1 <h1>页面2</h1>
2 <p><button ng-click="jump('/myLogin')">跳转带哦页面一(带参数跳转)</button></p>

 

 


五、代码片段进行传参

使用ngRoute进行参数的传递:
①明确发送方和接收方
发送方:register
接收方:start
②配置接收方的路由以及接受参数
.when('/myStart',{
templateUrl:'tpl/start.html'
})
.when('/myStart/:id',{
templateUrl:'tpl/start.html'
})
如果接受id,
借助ngRoute服务
$routeParams.id
③发送参数
<a href='#/myStart/123'></a>
$location.path('/myStart/123')


实现SPA应用
完整:manager.html
代码片段:check.html pay.html send.html
要求:
①能够实现不同页面的跳转
②check.html-->超链接跳转到pay.html,传入price,
pay.html接受参数并显示在页面中
pay.html--》按钮 点击跳转到send.html
send.html-->超链接跳转到check.html

HTML代码如下:

 1 <!DOCTYPE html>
 2 <html ng-app="myApp">
 3 <head lang="en">
 4     <meta charset="UTF-8">
 5     <script src="js/angular.js"></script>
 6     <script src="js/angular-route.js"></script>
 7     <title></title>
 8 </head>
 9 <body ng-controller="myCtrl">
10     <div ng-view></div>
11     <script>
12         var app = angular.module('myApp',['ng','ngRoute']);
13         app.config(function($routeProvider){
14             $routeProvider
15                     .when('/check',{
16                         templateUrl: 'tpl/check.html'
17                     })
18                     .when('/pay',{
19                         templateUrl: 'tpl/pay.html'
20                     })
21                     .when('/pay/:price',{
22                         templateUrl: 'tpl/pay.html',
23                         controller:'myCtrl2'
24                     })
25                     .when('/send',{
26                         templateUrl: 'tpl/send.html'
27                     })
28                     .otherwise({redirectTo:'/check'});
29         });
30         app.controller('myCtrl',
31                 ['$scope','$location',function($scope,$location){
32             $scope.jump = function(target){
33                 $location.path(target);
34             }
35         }]);
36         app.controller('myCtrl2',
37                 ['$scope','$routeParams',function($scope,$routeParams){
38             $scope.getPrice = $routeParams.price;
39                     console.log($scope.getPrice);
40         }]);
41     </script>
42 </body>
43 </html>

check代码如下:

1 <h1>check页面</h1>
2 <p><button ng-click="jump('/pay')">跳转到pay页面</button></p>
3 <p><a href="#/pay">跳转到pay页面</a></p>
4 <p><a href="#/pay/123455">跳转到pay页面 传参</a></p>
5 <p><button ng-click="jump('/pay/123455')">跳转到pay页面 传参</button></p>

 

pay 代码如下:

1 <div ng-include="'tpl/include/header.html'"></div>
2 <h1>pay页面</h1>
3 <p><button ng-click="jump('/send')">跳转到send页面</button></p>
4 <p>{{getPrice}}</p>
5 <div ng-include="'tpl/include/footer.html'"></div>

 

send 代码如下:

1 <h1>send页面</h1>
2 <p><button ng-click="jump('/chexk')">返回到check页面</button></p>

 


六、动态引入页头页尾
ngInclude:
<ANY ng-include="'tpl/include/header.html'"></ANY>

注意:引入页头/页尾文件路径时: 双引号  单引号  文件路径

七、其他模块
ngAnimate 支持js动画和css动画

①通过script 引入angular-animate.js到工程中
②指定自定义的模块,要依赖于ngAnimate
③设置cssngAnimate模块为ngView添加ng-leave和ng-leave-active、ng-enter和ng-enter-active.

HTML示例代码

 1 <!DOCTYPE html>
 2 <html ng-app="myApp">
 3 <head lang="en">
 4   <meta charset="UTF-8">
 5   <link rel="stylesheet" href="css/test.css"/>
 6   <script src="js/angular.js"></script>
 7   <script src="js/angular-animate.js"></script>
 8   <title></title>
 9 </head>
10 <body>
11 
12     <div class="page" ng-view>
13 
14     </div>
15 
16 </body>
17 </html>

相关css代码如下:

 1 body{
 2   overflow: hidden;
 3 }
 4 .page {
 5   position: absolute;
 6   width: 100%;
 7 }
 8 .page.ng-enter,
 9 .page.ng-leave {
10   -webkit-transition: .5s linear all;
11   -moz-transition: .5s linear all;
12   -ms-transition: .5s linear all;
13   -o-transition: .5s linear all;
14   transition: .5s linear all;
15 }
16 /*准备离开*/
17 .page.ng-leave {
18   left: 0;
19   opacity: 1;
20 }
21 /*离开完成*/
22 .page.ng-leave.ng-leave-active {
23   left: -100%;
24   opacity: 0;
25 }
26 /*刚开始进入*/
27 .page.ng-enter {
28   left: 100%;
29   opacity: 0;
30 }
31 /*进入完成*/
32 .page.ng-enter.ng-enter-active {
33   left: 0;
34   opacity: 1;
35 }

 


八、表单
在ng中,专门针对表单和表单中的控件,提供了一些属性,用于验证控件值的状态。
$pristine 未输入过
$dirty 已输入过
$valid 验证通过
$invalid 验证未通过
$error 验证时的错误信息

示例代码如下:

 

 1 <!DOCTYPE html>
 2 <html ng-app="myForm">
 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="formCtr">
10         <form name="my_form" ng-submit="print()">
11             <div>
12                 <h1>欢迎登录</h1>
13                 <p>
14                     <label for="uname">用户名:</label>
15                     <input type="text" ng-model="uname" name="uname" id="uname" required/>
16                     <span ng-show="my_form.uname.$error.required && my_form.uname.$dirty">
17                         用户名不能为空!!!
18                     </span>
19                 </p>
20                 <p>
21                     <label for="upwd">密码:</label>
22                     <input type="password" ng-model="upwd" name="upwd" id="upwd" required/>
23                     <span ng-show="my_form.upwd.$error.required && my_form.upwd.$dirty">
24                         密码不能为空!!!
25                     </span>
26                     <br/>
27                     <input type="checkbox" id="check" name="check"/>
28                     <label for="check">记住密码</label>
29                 </p>
30                 <p>
31                     <input type="submit" value="提交" ng-disabled="my_form.$invalid"/>
32                 </p>
33             </div>
34         </form>
35     </div>
36     <script>
37         var app = angular.module('myForm',['ng']);
38         app.controller('formCtr',['$scope',function($scope){
39             $scope.print = function(){
40                 var coieUser = check.checked
41                 console.log('name is '+$scope.uname+' password is '+$scope.upwd+ ' is remember user? '+coieUser);
42             }
43 
44         }]);
45     </script>
46 </body>
47 </html>

 

posted @ 2016-12-29 19:14  时间脱臼  阅读(148)  评论(0)    收藏  举报