通过一段时间对angular指令的使用,理解了angular指令的意义,下面逐一介绍一下。

ng-app:定义一个angualr模块,表示angular作用的范围,如下代码:

ng-app在html标签上使用时,表示angular作用于整个html页面,而在body上使用时表示作用于整个body

 <!DOCTYPE html>
<html lang="en" ng-app="app"> <!-- 定义在html中的 ng-app -->
<head>
<meta charset="UTF-8">
<title>test</title>
</head>
<body>
<script src="angular.js"></script>
</body>
</html> <!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>test</title>
</head>
<body ng-app="app"> <!-- 定义在body中的 ng-app -->
<script src="angular.js"></script>
</body>
</html>

ng-controller: 定义angular控制器,控制器是view与model之间数据传递的纽带

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>test</title>
</head>
<body ng-app="app">
<div ng-controller="myCtr">
</div>
<script src="angular.js"></script>
</body>
</html>

数据绑定有三种格式:

表达式形式{{}}、ng-bind='XXX'、ng-model='XXX'

表达式{{}}多用于绑定的数据较多时使用,指令形式为后两种,ng-model用于表单数据绑定,指令绑定数据不会出现闪屏问题(网速慢时,出现{{}}问题)

 <!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>test</title>
</head>
<body ng-app="app">
<div ng-controller="myCtr">
{{msg}} <!-- 表达式的形式 -->
<p ng-bind="msg"></p> <!-- ng-bind指令的形式 -->
<input type="text" ng-model="msg"> <!-- ng-model指令形式,用于表单数据绑定 -->
</div>
<script src="angular.js"></script>
<script>
var app = angular.module('app', []);
app.controller('myCtr',['$scope', function($scope){ }
</script>
</body>
</html>

为了解决上述表达式{{}}绑定数据时的闪屏问题,我们引入ng-cloak指令,其用法如下:

由于网速过慢,angular还未能很快加载进来,所以页面会出现{{}},闪屏问题

class="ng-cloak":将控制器内容隐藏,用户便不会看到{{}}闪屏

等到angular.js加载进来后,会通过ng-cloak指令将隐藏的内容显示出来,提升了用户体验效果,也解决了表达式{{}}闪屏问题,可以放心大胆的去使用表达式了

 <!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>test</title>
.ng-cloak {
display:none; <!-- 默认将控制器中内容隐藏 -->
}
</head>
<body ng-app="app">
<div ng-controller="myCtr" ng-cloak class="ng-cloak"> <!-- 当我们刷新页面时,控制器内的内容是隐藏的,angular加载进来后通过ng-cloak指令将其内容显示出来 -->
{{}}
</div>
<script src="angular.js"></script>
<script>
var app = angular.module('app', []);
app.controller('myCtr',['$scope', function($scope){ }
</script>
</body>
</html>

ng-value,用于表单中数据绑定的表达式(计算等),由此看来指令就像游戏中的装备,在什么样的情况下要使用什么样的指令(装备),这样才能标签语义化

 <!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>test</title>
<style>
.ng-cloak {
display:none;
}
</style>
</head>
<body ng-app="app">
<div ng-controller="myCtr" ng-cloak class="ng-cloak">
<form>
<input type="text" name="title" ng-model="goods.data.name">
<input type="text" name="price" ng-model="goods.data.price">
<input type="text" name="num" ng-model="goods.data.num">
<input type="text" name="allPrice" ng-value="goods.data.price*goods.data.num" ng-readonly="true" >
<input type="submit">
</form>
</div>
<script src="angular.js"></script>
<script>
var app = angular.module('app', []);
app.controller('myCtr',['$scope', function($scope){
$scope.goods = { data:{'name':'apple', 'price':300, 'num':0}
}
}]);
</script>
</body>
</html>

下面实现一个购物车功能,点击按钮增加货物数量,并增加总价,相反也可点击按钮减少货物数量,减少总价

 <!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>test</title>
<style>
.ng-cloak {
display:none;
}
</style>
</head>
<body ng-app="app">
<div ng-controller="myCtr" ng-cloak class="ng-cloak">
<p>商品名称:{{goods.data.name}}</p>
<p>商品价格:{{goods.data.price}}</p>
<p>商品数量:{{goods.data.num}}</p>
<p>商品总价:{{goods.data.price*goods.data.num}}</p>
<p ng-bind="goods.data.price"></p>
<button ng-click="goods.add()">add</button> //增加货物数量按钮
<button ng-click="goods.reduce()">reduce</button> //减少货物数量按钮
</div>
<script src="angular.js"></script>
<script>
var app = angular.module('app', []);
app.controller('myCtr',['$scope', function($scope){
$scope.goods = {
data:{'name':'apple', 'price':300, 'num':0},
add : function(){
$scope.goods.data.num = Math.min(++$scope.goods.data.num, 6); //通过取最小值,来保证,货物数量最大不能超过6
},
reduce: function(){
$scope.goods.data.num = Math.max(--$scope.goods.data.num, 0); //通过取最大值,来保证,货物数量最小不为0
}
}
}]);
</script>
</body>
</html>

Math.min(++$scope.goods.data.num, 6); 货物数量自加,然后与6比较取最小值,这样即可保证货物数量最大为6

Math.max(--$scope.goods.data.num, 0);  货物数量自减,然后与0比较取最大值,这样即可保证货物数量最小为0

在上述代码中加入下面代码片段,当我们点击关闭网站后status=0,status==0返回true,即ng-show="true",所以显示“网站正在维护”。

相反不显示,默认状态下,$scope.status = 1;也不会显示提示语。

<input type="radio" ng-model="status" ng-value="1">开启网站
<input type="radio" ng-model="status" ng-value="0">关闭网站
<div ng-show="status==0">
<textarea>网站正在维护</textarea>
</div>
......
$scope.status = 1;
......

复选框使用,注意要加 ng-true-value;ng-false-value;表示复选框被选中时其ng-model的值为1(0),言外之意就是其值想为什么就为什么,我们控制

<input type="checkbox" ng-model="kl.name1" ng-true-value="1" ng-false-value="0">游戏
<input type="checkbox" ng-model="kl.name2" ng-true-value="1" ng-false-value="0">电影
<div ng-show="kl.name1==1">游戏</div>
<div ng-show="kl.name2==1">电影</div> .......
$scope.kl = {"name1":"电影","name2":"游戏"};
.......

下拉框使用,其原理是通过 v.value as v.name for v in data 遍历数组,然后将其渲染成option标签, ng-model的值即为select的值(哪个option被选中值就是对应的

option标签的值)

<select ng-options="v.value as v.name for v in data" ng-model="city">
<option value=''>请选择城市</option> <!-- 默认显示,记得加value='' -->
</select> ...
$scope.data = [{name:'北京',value:'01'},{name:'广东', value:'02'}];
...

追加方法,会在原有obj后面添加后面的obj,注意属性名不能一样,不然会覆盖(红色标注)

...
{{scales}} <!-- view中显示出来,方便查看其结果 -->
... $scope.scales = {'name':'lol', 'value':'德玛西亚'};
angular.extend($scope.scales, {'web':'dota','url':'moba'});

遍历方法,forEach(),可以遍历数组,亦可遍历对象,回调中的参数 v表是被便利的元素,k表示索引(下标)

...
{{lol}} <!-- view中查看结果 -->
...
$scope.lol = [{'大区':'艾欧尼亚','hero':'剑姬'},{'大区':'守望之海', 'hero':'熔岩巨兽'}];
angular.forEach($scope.lol,function (v, k) {
console.log(v); //控制台输出v, 查看后发现 v 表示被遍历数组中的元素
v.hero = '德玛西亚'+v.hero; //添加前缀
}) dota = {'大区':'艾欧尼亚','hero':'剑姬'};
angular.forEach(dota, function(v, k){
console.log(v); //v表示元素值(艾欧尼亚..), k表示元素名称(大区...)
})

ng-model-options

...
<input type="text" ng-model="msg" ng-model-options="{updateOn: 'default blur', debounce:{default:2000, blur:0}}">{{msg}}
... angular.module("app", [])
.controller("myCtr", function($scope){ })

上述代码中,后面表达式显示内容是依据前面用户输入的内容现实的

updateOn 设置input事件,根据事件触发后面表达式的显示

debounce 设置时间(毫秒),根据时间设置后面表达式的显示

ng-class

...
.gray {
background-color: gray;
}
...
<p ng-class="{gray:true}"></p>
<p ng-class-odd="{gray:true}"></p>
<p ng-class-even="{gray:true}"></p>

ng-style

<p  ng-style="{color:gray}"></p>

ng-click, ng-dblclick, ng-keydown, ng-keyup, ng-mousedown, ng-mouseup, ng-mouseenter, ng-mouseleave, ng-mousemove, ng-focus, ng-blur

Angular指令渗透式理解的更多相关文章

  1. Angular4 后台管理系统搭建(9) - 用自定义angular指令,实现在服务端验证

    最近这段时间发现,北京这用angular4 或 angular2的公司很少.几乎是没有.很担心自己是不是把精力放到了不应该的地方.白耽误了时间.但是随着我对新版angular框架理解的加深.个人感觉a ...

  2. angular指令之complie和link不得不说的故事

    angular指令比较晦涩难懂的就是complie和link字段了,什么时候该用complie?什么时候该用link?总是很难分别清楚.当理解了指令的真正编译原理的时候,就会发现这相当的简单. ng怎 ...

  3. angular指令深度学习篇

    angular指令深度学习-过滤器 limitTo ... <body ng-app="app" > <div ng-controller="myCtr ...

  4. 傻瓜式理解递归之php递归

    写程序这么久了,有时候别人会问道一些算法比如排序啊,递归啊,总是不知道该怎么去说,今天就来整理一下,让更多的人去傻瓜式的理解递归.递归在网络上有很多定义,但有这么一句话听的最多:递归就是自己调用自己! ...

  5. angular.js的一点理解

    对angular.js的一点理解 2015-01-14 13:18 by MrGeorgeZhao, 317 阅读, 4 评论, 收藏, 编辑 最近一直在学习angular.js.不得不说和jquer ...

  6. angular 自定义指令 directive transclude 理解

    项目中断断续续的用了下angular,也没狠下心 认真的学习.angular 特别是自定义指令这块 空白. transclude 定义是否将当前元素的内容转移到模板中.看解释有点抽象. 看解释有点抽象 ...

  7. 【转】angular指令入坑

    独立作用域和函数参数 通过使用本地作用域属性,你可以传递一个外部的函数参数(如定义在控制器$scope中的函数)到指令.这些使用&就可以完成.下面是一个例子,定义一个叫做add的本地作用域属性 ...

  8. angular 指令作用域 scope

    转载自:https://segmentfault.com/a/1190000002773689 下面我们就来详细分析一下指令的作用域. 在这之前希望你对AngularJS的Directive有一定的了 ...

  9. angular 指令 要点解析

    指令可以删繁就简前端的js代码,杜绝重复的js代码和html代码. 下面就对指令的重要属性进行罗列 一.restrict  =  'AECM'  分别指该指令标识位于 attribute属性: < ...

随机推荐

  1. Nagios学习实践系列——产品介绍篇

    Nagios介绍 Nagios是一款功能强大.优秀的开源监控系统,它能够让你发现和解决IT架构中存在的问题,避免这些问题影响到关键业务流程. Nagios最早于1999年发布,它在开源社区的影响力是相 ...

  2. 数据库服务器改名导致Reporting Service不可用的案例

    案例环境: 操作系统版本    :    Windows Server 2012 R2 Standard 数据库版本      :   SQL Server 2012 Standard Edition ...

  3. [20141121]无法通过powershell读取sql server性能计数器问题

    背景: 全新服务器,需要增加性能监控,发现无法通过powershell读取性能指标 解决方法: Open the Registry Editor by going to the Start Menu ...

  4. python之数据库操作

    数据库操作 Python 操作 Mysql 模块的安装 1 2 3 4 5 linux:     yum install MySQL-python   window:     http://files ...

  5. p2p tcp nat 原理图+源码(原创)

    现今网上p2p的 udp nat穿透 文章 多如牛毛, p2p tcp nat的文章寥寥无几 ,up主研究了几天 终于有所收获,特来向大家分享,请大家多多支持! 1.首先你要有台外网服务器 或者 电信 ...

  6. 使用Sqoop从MySQL导入数据到Hive和HBase 及近期感悟

    使用Sqoop从MySQL导入数据到Hive和HBase 及近期感悟 Sqoop 大数据 Hive HBase ETL 使用Sqoop从MySQL导入数据到Hive和HBase 及近期感悟 基础环境 ...

  7. OpenGL ES无法获取贴图数据原因

    最近在做一个项目,要从贴图中获取图像数据,查了很多资料,也琢磨很久,获取到的数据都是0.终于在一次偶然的机会,发现了端倪,成功了. 不得不说这"一分灵感"真的很重要 以下是在获取贴 ...

  8. MySQL优化实例

    这周就要从泰笛离职了,在公司内部的wiki上,根据公司实际的项目,写了一些mysql的优化方法,供小组里的小伙伴参考下,没想到大家的热情很高,还专门搞了个ppt讲解了一下. 举了三个大家很容易犯错的地 ...

  9. register_shutdown_function AND fastcgi_finish_request

    在php中又两个方法都是在请求快结束的时候执行.方法名分别是 register_shutdown_function和fastcgi_finish_request.虽然执行的时机差不多,但是功能和应用场 ...

  10. PKCS#1规范阅读笔记1--------基本概念

    规范中有很多数学相关的推演和计算,并不打算在这里介绍,主要介绍一下相关的计算流程及最终的签名结果. 算法可以分为:对称算法和非对称算法两大类.对称算法加密和解密都用的是同一个密钥:而非对称算法却是有一 ...