Angular普通指令
ng-app
- 告诉angular它在页面中所要控制的范围
- 页面加载完成angular会自动在页面中查找这个指令
- 如果页面中没有这个指令,angular将不会启动
- 告诉angular当前页面由哪一个模块来管理
ng-model
实现双向数据绑定(获取表单元素中的值)
1
| <input type="" value="11" ng-model="val">
|
双向绑定原理
脏检查机制
angular在页面加载完成之后会在页面中查找ng-agg指令,如果找到会在js中创建一个对象来存储页面中的数据,当html页面中文本框的值改变之后,angular会取到文本框的值然后赋给创建出对象里的变量,对象变量发生改变的时候,angular会在页面中找哪一个地方使用到了这个变量,找到之后将变量更新成最新的值,这个过程叫数据双向数据绑定
实现双向数据绑定的条件
- 必须是表单元素
- 在表单元素身上写 ng-model指令
ng-init
初始化变量的值
ng-click
点击事件(和原生JS中的onclick事件作用一样)
ng-repeat
遍历数据
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
| <body ng-app="myApp" ng-controller="demoCtrl"> <h4>遍历 一维数组</h4> <ul> <!-- ng-repeat 遍历数据 类似于for in 循环 in 是固定写法 in 后面加上要遍历的数据 item 是遍历的当前项(item这个词可以随意写) 这个指令可以加在任何标签上 --> <li ng-repeat="item in data"> {{item}} </li> </ul> <hr /> <h4>遍历 数组中混合对象</h4> <p ng-repeat="item in person">{{item.name}} {{item.age}}</p> <hr /> <h4>遍历 对象</h4> <!-- key代表对象的键值 val代表对象键值对应的值 --> <div ng-repeat="(key,val) in obj"> {{key}} {{val}} </div> <script src="node_modules/angular/angular.min.js"></script> <script> angular.module('myApp',[]) .controller('demoCtrl',['$scope',function($scope){ // 一维数组 $scope.data = ['小明','小红','小黑','小琴']; // 数组中混合对象(最常用的形式) $scope.person = [ {name:'小明',age:18}, {name:'小红',age:28}, {name:'小红',age:28}, {name:'小黑',age:38}, {name:'小琴',age:48} ] // 对象 $scope.obj = { name:'小明', age:35, hobby : '吃饭' } }]) </script> </body>
|
ng-repeat中所用到的索引
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| $index : 遍历过程中的索引 $first : 布尔类型的值 当前是否是第一项 是返回true 不是返回false $last : 布尔类型的值 当前是否是最后一项 是返回true 不是返回false $middle : 布尔类型的值 第一项和最后一项返回false 其余返回true $even : 偶数项返回true 否则返回false $odd : 奇数项返回true 否则返回false 利用这些值在循环的过程中做各种判断 达到我们想要的目的 <ul> <li ng-repeat="item in person" class="{{$first ? 'first' : ''}} {{ $last ? 'last' : ''}}"> <p>名字:{{item.name}}</p> <p>年龄:{{item.age}}</p> <p>索引:{{$index}}</p> <p>是否是第一项:{{$first}}</p> <p>是否是最后一项:{{$last}}</p> <p>是否是中间项:{{$middle}}</p> <p>是否偶数项:{{$even}}</p> <p>是否奇数项:{{$odd}}</p> </li> </ul>
|
遍历中不能有重复类型的值(基本数据类型)
在遍历的数据后面写上track by 一个唯一(不重复)的值 一般会写$index
1 2 3 4 5 6 7
| <div ng-repeat="item in data track by $index"> {{item}} </div> <hr /> <div ng-repeat="(key,val) in data track by key"> {{val}} </div>
|
ng-class
操作类名
1-指令的值以对象的形式存在
2-对象的属性值转化为布尔值是true时,将当前的属性名作为类名添加到class属性中
3-对象的属性值转化为布尔值是false时,将当前的属性名从class属性中删除掉
4-属性值可以是数据模型,也可以是JS表达式
1 2 3 4 5
| .color{ background: red; } ----------------------------------------- <div ng-class={color:true}> 你好么</div>
|
注意:angular不推崇DOM操作,在当前例子中并没有直接操作类名的JS语句, 而是通过数据模型isGreen的值是true还是false来确定添加哪个颜色的类名,至于如何添加到class属性中,由angular替我们完成。
数据绑定
页面中闪烁的问题
ng-bind
ng-bind-template
1
| ng-bind-template=" {{ 变量1 }} {{ 变量2 }}"
|
ng-cloak
angular会隐藏有ng-cloak指令或样式的元素,在做完解析之后又会移除元素身上的ng-cloak样式和指令,从而解决表达式闪烁的问题
但是!angular在页面的最后才被引用进来,所以不能很好的解决这个问题需要我们手动在页面顶部加上隐藏元素的样式
1 2 3 4 5 6 7
| <style> .ng-cloak,[ng-cloak]{display:none;} </style> ----------------------------------------- <div class="ng-cloak"> {{msg2}} </div>
|
ng-non-bindable
不让angular解析其中的代码
ng-show(ng-hide)
控制元素显示隐藏(通样式的方式 display:none),当值为true时 元素显示,当值为false时 元素隐藏
ng-if
控制元素显示隐藏
区别是ng-if是通过DOM节点的添加和删除使得元素显示和隐藏
ng-switch、ng-switch-when
ng-switch ng-switch-when 是一对指令类,似于JS中 switch case 语句, 匹配到哪项 哪项就显示 其他项就隐藏,常用于 做多个选项卡的显示和隐藏
1 2 3 4 5 6 7 8 9 10 11
| <body ng-app ng-init="showNum=1"> <div ng-switch="showNum"> <button ng-click="showNum=1">显示1</button> <button ng-click="showNum=2">显示2</button> <button ng-click="showNum=3">显示3</button> <div ng-switch-when="1">1</div> <div ng-switch-when="2">2</div> <div ng-switch-when="3">3</div> </div> <script src="node_modules/angular/angular.min.js"></script> </body>
|
ng-options
生成select下拉列表 需要配合ng-model指令使用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
| ng-options 用于生成下拉列表 需要和ng-model指令一起使用 否则报错 <select ng-options="item.value as item.name for item in balls"></select> item.name for for是固定语法 angular会将name字段对应的值 放在option标签内 item.value as as是固定语法 angular会将value字段对应的值 放在option标签的value属性上 -------------------------------------------------------------------------------- <select ng-model="likeBall" ng-options="item.value as item.name for item in balls"></select> {{likeBall}} <script src="node_modules/angular/angular.min.js"></script> <script> angular.module('myApp',[]) .controller('demoCtrl',['$scope',function($scope){ // 给下拉列表设置默认值 和options标签value属性的值对应 $scope.likeBall = "001"; // 下拉列表的数据源 $scope.balls = [ { name:'足球', value:'001' }, { name:'篮球', value:'002' }, { name:'橄榄球', value:'003' }, { name:'排球', value:'004' }, { name:'乒乓球', value:'005' } ]; }]) </script> </body>
|
ng-style
添加样式
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| <span ng-style="{'width':'100px','height':'100px'}"></span> <span style="width:100px;height:100px;"></span> scope.style = { background:'skyblue', width:'100px', height:'100px', position:'fixed', lineHeight:'100px', fontSize:'40px', textAlign:'center', right:'10px', bottom:'10px', cursor:'pointer' };
|
ng-bind-html
1
| ng-bind-html="变量" 能够正常解析数据中的HTML标签
|
事件指令
ng-click
ng-dblclick
ng-blur
ng-focus
ng-change
其他指令
ng-href
ng-src
表达式
- 双大括号的形式称之为插值表达式
- 在表达式中可以写ng中的变量
- 可以显示字符串
- 在表达式中可以进行计算
- 可以在表达式中写三目运算符
- 执行angular函数