指令:Directive

angularJS 有一套完整的,可拓展的,用来帮助web应用开发的指令集;

在建立DOM期间,和HTML关联着的指令会被检测到,并被执行;

在angularJS中将前缀为 ng- 这种属性称之为指令,其作用就是为DOM元素调用方法,定义行为绑定数据等;

简单说:当一个angular 应用启动时,angular会遍历DOM树来解析HTML,根据指令不同,完成不同的操作;

指令属性小提示:

ng-xxx 的属性并不是标准中定义的属性,很多情况下语法校验是无法通过的;

HTML5允许拓展(自制的)的属性,以data- 开头;

在angularJS中可以使用 data-ng- 来让网页对HTML有效(两者效果都是一样的)

<hrml ng-app>
<hrml data-ng-app>

ng-app指令

ng-app 指令用来表明一个 angularJS 应用程序;

标记在一个 angularJS 的作用范围在根对象上;

系统执行的时候会自动的执行根对象范围内的指令;

可以在一个页面创建多个 ng-app 节点(不推荐),原因:创建多个 ng-app 时,默认只能执行第一个,后面的需要进行手动引导:angular.bootstrap()

标记的范围尽可能小,性能优化

多个 ng-app 的使用

<div ng-app="myAppOne" ng-controller="myAppOneController">
<input type="button" value="按钮一" ng-click="show()">
</div>
<div ng-app="myAppTwo" ng-controller="myAppTwoController">
<input type="button" value="按钮二" ng-click="show()">
</div>
</body>
<script type='text/javascript' src='bower_components/angular/angular.js'></script>
<script type="text/javascript">
var myAppOne = angular.module('myAppOne',[]);
myAppOne.controller('myAppOneController',['$scope',function($scope){
$scope.show = function(){console.log('1');};
}]);
var myAppTwo = angular.module('myAppTwo',[]);
myAppTwo.controller('myAppTwoController',['$scope',function($scope){
$scope.show = function(){console.log('2');};
}]);
//手动引导让第二个div被myAppTwo管理
angular.bootstrap(document.querySelector('[ng-app="myAppTwo"]'),['myAppTwo']);
//上面这种方法,可以解决,但是angularJS不推荐,推荐使用的是:
//创建一个新模块,去管理其他的模块 接下来将ng-app="myApp"
angular.module('myApp',['myAppOne'],['myAppTwo']);
</script>

ng-bind指令

作用:将作用域(scope)中的值绑定到元素的 innerHTMl 中,其效果会比通过表达式绑定的方式会更加友好:

如果绑定的内容有HTML,就会自动转义:

<div ng-app ng-init="dataName='张三'">
<h1 ng-bind="dataName"></h1>
</div>

如果要绑定HTMl,需要引入 angular-sanitize 这个包:

即使引入这个包,还是会有有问题:

原因
引进了的文件,如果想要用它提供的模块,就必须让我们的模块去依赖它里面的模块,才能使用它的模块;
如果直接写ng-app,是直接使用angularjs提供的一个默认的模块,这个模块是没有去依赖这个东西的,所以不会生效;
这样就可以生效:
<div ng-app ng-init="dataName='<span>love</span>'">
<h1 ng-bind-html="dataName"></h1>
</div>
</body>
<script type='text/javascript' src='bower_components/angular/angular.js'></script>
<script type="text/javascript" src="bower_components/angular/angular-sanitize.js"></script>

ng-cloak指令

ng-cloak指令用于在AngularJS 应用在加载时防止angularJS代码未加载玩而出现的问题;

angularJS应用在加载时,文档可能会由于angularJS代码未加载完而出现显示angularJS代码,进而会有闪烁的效果,ng-clock指令就是为了阻止该问题的发生

闪一下的问题,除了可以用ng-bind,但是这个属性,比较适用于一两个元素,如果元素比较多的情况就可以是以使用ng-cloak:
执行机制:当angular在执行的过程中,会在这个元素上默认保持不动,angular在执行完之后,会自动移除这个属性;

ng-show / ng-hide 指令

ng-show / ng-hide指令会根据属性值去确定是否展示当前元素,例如:ng-show=false则会不会显示该元素

使用这个做一个遮罩层的显示隐藏:

<style type="text/css">
div.shadow{background-color: rgba(0,0,0,0.5); position: absolute; top: 0px; right: 0px; bottom: 0px; left: 0px;}
</style>
<div class="shadow" ng-app="myApp" ng-show="loading" ng-controller="myAppController"></div>
<script type="text/javascript">
var myApp = angular.module("myApp",[]);
myApp.controller('myAppController',['$scope','$timeout',function($scope,$timeout){
$scope.loading = true;
$timeout(function(){
$scope.loading = false;
},3000);
}]);
</script>

ng-if指令

决定一个元素是否存在;ng-if = "true/false";

ng-show : 元素是否显示;
ng-hide:元素是否隐藏;
ng-if:元素是否存在;

ng-href / ng-src 指令

ng-href / ng-src 指令用于解决当链接类型的数据绑定造成的加载BUG,如:

<!-- 浏览器在解析HTML时会请求{{item.url}} -->
<img src="{{item.url}}">
<!-- 可以使用ng-src解决问题 -->
<img ng-src="{{item.url}}">

ng-switch指令

ng-switch指令根据表达式显示或隐藏对应的部分。

对应的子元素使用 ng-switch-when 指令,如果匹配选择显示,其他未匹配的则会被移除;

你可以通过使用 ng-switch-default 指令设置默认选项,如果都没有匹配的情况,默认选项会显示;

ng-switch指令的效果:
ng-switch需要配合 ng-switch-when和ng-switch-default来使用:

<div ng-app>
<select ng-model="myVar">
<option value='jd'>www.jd.com</option>
<option value='taobao'>www.taobao.com</option>
<option value='baidu'>www.baidu.com</option>
</select>
<div ng-switch="myVar">
<div ng-switch-when="jd">www.jd.com</div>
<div ng-switch-when="taobao">www.taobao.com</div>
<div ng-switch-when="baidu">www.baidu.com</div>
<div ng-switch-default="baidu">请选择</div>
</div>
</div>

其他常用指令

ng-cheched : 单选 / 复选是否被选中;

ng-disabled : 是否禁用;

ng-readonly : 是否只读;

ng-selected : 是否选中;

<div ng-app>
<!-- 都不选中 -->
<input type="checkbox" ng-model="true">
<input type="checkbox" ng-checked="true">
</div>

实现全选和全不选:

<div ng-app>
<p><input type="checkbox" ng-model="checked">全选或者全不选</p>
<li>选项0<input type="checkbox" ng-checked="checked"></li>
<li>选项0<input type="checkbox" ng-checked="checked"></li>
<li>选项0<input type="checkbox" ng-checked="checked"></li>
<li>选项0<input type="checkbox" ng-checked="checked"></li>
<li>选项0<input type="checkbox" ng-checked="checked"></li>
<li>选项0<input type="checkbox" ng-checked="checked"></li>
</div>

常用的事件指令

ng-blur : 失去焦点;

ng-change : 发生改变;

ng-copy : 拷贝完成;

ng-click : 单击;

ng-dbclick : 双击;

ng-focus : 获得焦点;

ng-submit : 表单提交;

angularJS 的指令系统中还有一块是:自定义指令;(稍微麻烦,在此不做赘述)

angularJS指令系统---Directive的更多相关文章

  1. AngularJS之directive

    AngularJS之directive AngularJS是什么就不多舌了,这里简单介绍下directive.内容基本上是读书笔记,所以如果你看过<AngularJS up and runnin ...

  2. Angularjs之directive指令学习笔记(二)

    1.Directive的五个实例知道driective作用.其中字段restrict.template. replace.transclude.link用法 参考文章链接地址:http://damoq ...

  3. 前端angularJS利用directive实现移动端自定义软键盘的方法

    最近公司项目的需求上要求我们iPad项目上一些需要输入数字的地方用我们自定义的软键盘而不是移动端设备自带的键盘,刚接到需求有点懵,因为之前没有做过,后来理了一下思路发现这东西也就那样.先看一下实现之后 ...

  4. Angularjs的directive封装ztree

    一般我们做web开发都会用到树,恰好ztree为我们提供了多种风格的树插件. 接下来就看看怎么用Angularjs的directive封装ztree <!DOCTYPE html> < ...

  5. angularJS中directive父子组件的数据交互

    angularJS中directive父子组件的数据交互 1. 使用共享 scope 的时候,可以直接从父 scope 中共享属性.使用隔离 scope 的时候,无法从父 scope 中共享属性.在 ...

  6. angularjs指令系统系列课程(1):目录

    angularjs里面有一套十分强大的指令系统 比如内置指令:ng-app,ng-model,ng-repeat,ng-init,ng-bind等等 从现在开始我们讲解AngularJS自定义指令, ...

  7. angularJS中directive与directive 之间的通信

    上一篇讲了directive与controller之间的通信:但是我们directive与directive之间的通信呢? 当我们两个directive嵌套使用的时候怎么保证子directive不会被 ...

  8. angularJS中directive与controller之间的通信

    当我们在angularJS中自定义了directive之后需要和controller进行通讯的时候,是怎么样进行通讯呢? 这里介绍3种angular自定义directive与controller通信的 ...

  9. AngularJS之Directive,scope,$parse

    AngularJS内幕详解之 Directive AngularJS内幕详解之 Scope AngularJS的指令(Directive) compile和link的区别及使用示例 浅谈Angular ...

随机推荐

  1. 05 Oracle process

    本章提要----------------------------------------------所有的 process 都是在 PGA 内(memory)server process: 与 cli ...

  2. thinkphp Ajax表单提交

    ajax无刷新提示...局部刷新... http://www.thinkphp.cn/extend/230.html 保存表单数据的表 绿色的部分就是ajax显示出来的东西 控制器 ajax检查标题 ...

  3. thinkphp 3.2跟3.1 区别

    1.ThinkPHP3.2 主要整合了3.1以及之前版本的分组问题.3.2之前有普通分组和独立分组,还需要在配置文件中配置.3.2已经不需要配置了,直接使用独立分组就可以了.2.ThinkPHP3.2 ...

  4. thinkphp 无限级分类的思想 分析

    $list=$cate->field("id,name,pid,path,concat(path,'-',id) as bpath")->order('bpath')- ...

  5. 第二百八十二节,MySQL数据库-MySQL视图

    MySQL数据库-MySQL视图 1.视图是一个虚拟表(非真实存在),其本质是[根据SQL语句获取动态的数据集,并为其命名],用户使用时只需使用[名称]即可获取结果集,并可以将其当作表来使用. 2.也 ...

  6. e678. 尖锐化图像

    This example demonstrates a 3x3 kernel that sharpens an image. Kernel kernel = new Kernel(3, 3, new ...

  7. linux基础知识的总结

    例如以下内容是我对linux基础知识的总结,由于本人在初期学习linux的时候走了不少的弯路,对于基础的掌握耗费了不少的时间,所以为了后来者对linux的基础部分有个清晰的了解,特对基础知识进行了总结 ...

  8. 学习:List的扁平化 和 拼接

    一.list_to_binary/1的参数:iolist类型的. 二.lists:concat(Things) -> string() Types: Things = [Thing] Thing ...

  9. 天线增益英文名称:antenna gain

    天线增益是指:在输入功率相等的条件下,实际天线与理想的辐射单元在空间同一点处所产生的信号的功率密度之比.它定量地描述一个天线把输入功率集中辐射的程度.增益显然与天线方向图有密切的关系,方向图主瓣越窄, ...

  10. 【Java面试题】1 Java中使用switch-case的用法及注意事项超全总结

    今天在用到switch的时候,这种设计到最基本的内容,可能忘记它的一些基本语法,出现了一些错误,所以即兴从各种资料查询总结了下面的内容,希望可以帮助那些正在困扰switch错误和各种细节问题的朋友! ...