一、angular 的介绍

AngularJS[1]  诞生于2009年,由Misko Hevery 等人创建,后为Google所收购。是一款优秀的前端JS框架,已经被用于Google的多款产品当中。AngularJS有着诸多特性,最为核心的是:MVC、模块化、自动化双向数据绑定、语义化标签、依赖注入等等。

AngularJS 是一个 JavaScript框架。它是一个以 JavaScript 编写的框架。它可通过 <script> 标签添加到HTML 页面。

AngularJS 通过 指令 (directive)扩展了 HTML,且通过 表达式{{}} 绑定数据到 HTML。

AngularJS 是以一个 JavaScript 文件形式发布的,可通过 script 标签添加到网页中。

库和框架的区别

类库 - 类库是一些函数的集合,它能帮助你写WEB应用。起主导作用的是你的代码,由你来决定何时使用类库。类库有:jQuery

框架 - 框架是一种特殊的、已经实现了的WEB应用,你只需要对它填充具体的业务逻辑。这里框架是起主导作用的,由它来根据具体的应用逻辑来调用你的代码。框架有:knockout、sproutcore react vue等

 下载angular.js文件

http://cdn.code.baidu.com/ 百度静态资源库

https://angularjs.org/ angular 官方网站 1.x版本的网站

https://angular.io/    2.x  4.x 网站

angular系统架构图 angular框架介绍_angular系统架构图

<!DOCTYPE html>
<html lang="en" ng-app="app">
<head>
    <meta charset="UTF-8" />
    <title></title>
    <script src="./js/angular.js"></script>
</head>
<body>
       <h1>{{5+6}}</h1>
     <script type="text/javascript">
       var app = angular.module("app",[]);
     </script>
</body>
</html>

提示:①angular当中有指令之说,ng-XX开头 ,ng代表的是angular的缩写;

这个指令一般是放在HTML标签这里,它暗示着整个静态页面是一个单页面应用;

这个页面当中只能有一个ng-app指令;ng-app = “app”,这个应用的名称

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

文件对外暴露了一个angular的对象,这个对象有一个方法叫做module(“应用的名称”,[])

数组当中第二个参数是数组,代表的是你这个应用的依赖;

这里面可以写一些简单的数学运算。+ - * / 表达式 不能为变量、if、for这些不行

 

<!DOCTYPE html>
<html lang="en" ng-app="app">
<head>
    <meta charset="UTF-8" />
    <title></title>
    <script src="./js/angular.js"></script>
</head>
<body>
       <h1>{{6+6+6}}</h1>

      <div ng-controller="Mainctr as mc">
            <h1>{{mc.name}}</h1>
            <button ng-click="mc.add()">Add</button>
            <h2>{{mc.age}}</h2>
            <button ng-click="mc.minus()">minus</button>
       </div>
     <script type="text/javascript">
       //angular对象打点module方法  应用的名称  数组暂时为空,它代表的含义是你这个应用需要的依赖的模块
       var app = angular.module("app",[]);
        //app对象打点使用controller函数:会创建一个控制器类 ,还有一个还有一个函数你可以认为初始化函数
       app.controller("Mainctr",[function () {
             this.name = "小明";
             this.age = 10;
             //添加方法 加的方法
             this.add = function  (argument) {
                 this.age+=10;
             }
            //减的方法  
             this.minus = function  (argument) {
                 this.age-=10;
             }
       }])

     </script>
</body>
</html>

 

提示:①返回的app对象它有一个方法叫做controller(“MainCtr”,[function(){

}]);它相当于一个类

ng-controller指令:全部的指令都是嵌套在标签之中

      ③实例对象的时候 MainCtr as mc

ng-click = “”;需要添加引号

总结:刚才全部的操作,你会发现,咱么根本就没有操作dom,你会发现数据发生变化,视图跟着发生变化

数据发生变化-视图发生变化

 

<h1>{{1+2}}</h1>
     <div ng-controller="Mainctr as mainctr">
          <button ng-click="mainctr.add()">add</button>
          <span>{{mainctr.a}}</span>
          <button ng-click="mainctr.minus()">minus</button>
          <div class="box" ng-style={'width':mainctr.a+"px"}>
          </div>
          <span ng-style={"font-size":mainctr.a+"px"}>123</span>
     </div>
    <script type="text/javascript">
        var app = angular.module("app",[]);
        //声明一个控制器的一个类
        app.controller("Mainctr",[function  (argument) {
              this.a = 10;
              //添加ADD方法
              this.add = function  (argument) {
                   this.a +=10;
              }
              //添加一个减的方法
              this.minus = function  (argument) {
                  this.a-=10;
              }
        }])
    </script>

 

提示:玩的是‘数据’。ng-style可以设置样式,但是需要注意的是value是一个JSON

 

数据的双向绑定

 

<div ng-controller="MainCtr as mainctr">
          <h4>{{mainctr.a}}</h4>
          <!-- 数据的双向绑定 -->
          <input type="text" ng-model="mainctr.a">
          <!-- 是否购买保险 -->
          <p>
             是否买保险:<input type="checkbox" ng-model="mainctr.b">
             {{mainctr.b?"买保险":"滚蛋"}}
          </p>
          <!-- 性别 -->
          <p>
            <input type="radio" value="男" ng-model="mainctr.sex">男
            <input type="radio" value="女" ng-model="mainctr.sex">女
            <input type="radio" value="未知" ng-model="mainctr.sex">未知
            <span>{{mainctr.sex}}</span>
          </p>
          <!-- range条 -->
          <p>
           <input type="range" min="0"  max="255" ng-model="mainctr.range"/>
{{mainctr.range}}
          </p>
    </div>
    <script type="text/javascript">
        var app = angular.module("app",[]);
        app.controller("MainCtr",[function  (argument) {
                 this.a =123;
                 this.b = true;
                 this.sex = "未知";
                 this.range = 20;
        }]);
    </script>

 

 

 

提示:数据的双向绑定是通过ng-model进行数据的双向的绑定;

调色板

 

<!DOCTYPE html>
<html lang="en" ng-app="app">
<head>
    <meta charset="UTF-8" />
    <title></title>
    <script src="./js/angular.js"></script>
    <style type="text/css">
        .box{
             position: relative;
             width: 200px;
             height: 200px;
             background:pink;
        }
    </style>
</head>
<body>
    <div ng-controller="MainCtr as mainctr">
        <div class="box" ng-style="mainctr.getRGBA()">

       </div>
        <p>
           <input type="range" min="0" max="255" ng-model="mainctr.R">
           <span>{{mainctr.R}}</span>
       </p>
        <p>
           <input type="range" min="0" max="255" ng-model="mainctr.G">
           <span>{{mainctr.G}}</span>
       </p>
        <p>
           <input type="range" min="0" max="255" ng-model="mainctr.B">
           <span>{{mainctr.B}}</span>
       </p>
        <p>
           <input type="range" min="0" max="255" ng-model="mainctr.A">
           <span>{{mainctr.A}}</span>
       </p>
    </div>
    <script type="text/javascript">
        var app = angular.module("app",[]);
        app.controller("MainCtr",[function  (argument) {
                //双向绑定的数据RGBA
                this.R = 0;
                this.G = 0;
                this.B = 0;
                this.A = 0.5;

                //添加一个RGBA的方法
                this.getRGBA = function  (argument) {
                    return {"background":"rgba("+this.R+','+this.G+','+this.B+','+this.A+")"}
                }
        }]);
    </script>
</body>
</html>

 

微博的发布框

 

<!DOCTYPE html>
<html lang="en" ng-app="app">
<head>
    <meta charset="UTF-8" />
    <title></title>
    <script src="./js/angular.js"></script>
    <style type="text/css">
        .waring{
             color:red;
        }
    </style>
</head>
<body>
      <div ng-controller="MainCtr as mainctr">
          <textarea rows="20" cols="20" ng-model="mainctr.content">

          </textarea>
          <p>
           共<span ng-class="{'waring':mainctr.content.length>=140}">{{mainctr.content.length}}</span>/140个字
           <button ng-disabled="mainctr.content.length>=140">发布</button>
         <button ng-disabled="mainctr.content.length==0" ng-click="mainctr.clear()">清空</button>
          </p>
      </div>
      <script type="text/javascript">
        var app = angular.module("app",[]);
        app.controller("MainCtr",[function  (argument) {
            this.content = "";
            this.clear = function  (argument) {
                 this.content = "";
            }
        }]);
      </script>
</body>
</html>

 

 

 

ng-repeat循环

概述:在angular当中标签部分,可以用ng-repeat你可以认为是for循环;

 

<!DOCTYPE html>
<html lang="en" ng-app = "app">
<head>
    <meta charset="UTF-8" />
    <title></title>
    <script src="./js/angular.js"></script>
</head>
<body>
     <div ng-controller="Mainctr as mainctr">
           <ul ng-repeat="item in mainctr.hobby">
               <li>{{item.name}}</li>
           </ul>
     </div>
    <script type="text/javascript">
        var app = angular.module("app",[]);

        app.controller("Mainctr",[function  (argument) {
           this.hobby = [{"name":"小明"},{"name":"大明"},{"name":"老明"}];
        }]);
    </script>
</body>
</html>

 

小小学生管理系统

 

<!DOCTYPE html>
<html lang="en" ng-app = "app">
<head>
    <meta charset="UTF-8" />
    <title></title>
    <script src="./js/angular.js"></script>
    <style type="text/css">

      table,tr,td{
         border:1px solid black;
         border-collapse:collapse;
      }
      tr:nth-child(2n){
        color:purple;
      }
      .addStudent{
          position: fixed;
          top: 0;
          right: 10px;
      }
    </style>
</head>
<body>
     <div ng-controller="Mainctr as mainctr">
        <div>
         <table>
            <tr>
                  <td>学号</td>
                  <td>姓名</td>
                  <td>年龄</td>
                  <td>性别</td>
                  <td>删除</td>
            </tr>
            <tr ng-repeat="item in mainctr.students track by $index">
                <!-- 学号 -->
                <td>
                  <span ng-dblclick="item.isShow=true" ng-show="!item.isShow">{{item.id}}</span>
                  <input type="text" ng-show="item.isShow" ng-blur="item.isShow=false" ng-model="item.id">
                </td>
                <!-- 姓名 -->
                  <td>
                  <span ng-dblclick="item.ShowName=true" ng-show="!item.ShowName">{{item.name}}</span>
                  <input type="text" ng-show="item.ShowName" ng-blur="item.ShowName=false" ng-model="item.name">
                </td>
                <!-- 年龄 -->
                 <td>
                  <span ng-dblclick="item.ShowAge=true" ng-show="!item.ShowAge">{{item.age}}</span>
                  <input type="text" ng-show="item.ShowAge" ng-blur="item.ShowAge=false" ng-model="item.age">
                </td>
                <!-- 性别 -->
                 <td>
                  <span ng-dblclick="item.ShowSex=true" ng-show="!item.ShowSex">{{item.sex}}</span>
                  <input type="text" ng-show="item.ShowSex" ng-blur="item.ShowSex=false" ng-model="item.sex">
                </td>
                <td ng-click="mainctr.remove(item.id)">删除</td>
            </tr>
         </table>
        </div>
           <!-- 下面是添加学生的布局 -->
            <div class="addStudent">
                   <p>
                      学号:<input type="text" name="" ng-model ="mainctr.formData.id">
                   </p>
                    <p>
                      姓名:<input type="text" name="" ng-model ="mainctr.formData.name">
                   </p>
                   <p>
                      年龄:<input type="text" name="" ng-model ="mainctr.formData.age">
                   </p>
                    <p>
                      性别:<input type="text" name="" ng-model ="mainctr.formData.sex">
                   </p>
                   <p>
                      <button ng-click = "mainctr.addStudent()">添加学生</button>
                   </p>
           </div>
     </div>
    <script type="text/javascript">
        var app = angular.module("app",[]);

        app.controller("Mainctr",[function  (argument) {
              this.students = [
                   {"id":0,"name":"贾成豪","age":18,"sex":"男"},
                   {"id":1,"name":"小青","age":38,"sex":"女"},
                   {"id":2,"name":"刘铭","age":28,"sex":"男"},
                   {"id":3,"name":"小猪","age":68,"sex":"男"}
              ];

              //数据的双向绑定
              this.formData = {
                   "id":"",
                   "name":"",
                   "age":"",
                   "sex":""
              }
              //添加学生
              this.addStudent = function  (argument) {
                 this.students.push(this.formData);
              }
              //删除的方法
              this.remove = function  (id) {
                    var i = 0;
                   while(i<this.students.length){

                     if(this.students[i].id==id){
                       this.students.splice(i,1);
                     }
                     i++;
                 }
              }
        }]);
    </script>
</body>
</html>