一、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 网站
<!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的缩写;
②ng-app:这个指令一般是放在HTML标签这里,它暗示着整个静态页面是一个单页面应用;
这个页面当中只能有一个ng-app指令;ng-app = “app”,这个应用的名称
③var app = angular.module("app",[]);
Angular.js文件对外暴露了一个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>