指令(Directive)

AngularJS 有一套完整的、可扩展的、用来帮助 Web 应用开发的指令集

在 DOM 编译期间,和 HTML 关联着的指令会被检测到,并且被执行

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

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

注意:HTML5 允许扩展的(自制的)属性,以 data- 开头。

AngularJS 属性以 ng- 开头,但是您可以使用 data-ng- 来让网页对 HTML5 有效。

二者效果相同。

1、ng-app 指令

ng-app指令用来标明一个AngularJS应用程序

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

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

可以在同一个页面创建多个ng-app节点

但是angular找到第一个ng-app过后就不会再找

 <!DOCTYPE html>
<html lang="en"> <head>
<meta charset="UTF-8">
<title>ng-app 指令</title>
</head> <body ng-app="myApp">
<!-- angular找到第一个ng-app过后就不会再找 -->
<div ng-controller="App1Controller">
<input type="button" value="按钮1" ng-click="do1()">
</div>
<div ng-controller="App2Controller">
<input type="button" value="按钮2" ng-click="do2()">
</div>
<script src="bower_components/angular/angular.js"></script>
<script>
// 零件1
var myApp1 = angular.module('myApp1', []);
myApp1.controller('App1Controller', ['$scope', function($scope) {
$scope.do1 = function() {
console.log(11111);
};
}]);
// 零件2
var myApp2 = angular.module('myApp2', []);
myApp2.controller('App2Controller', ['$scope', function($scope) {
$scope.do2 = function() {
console.log(22222);
};
}]); angular.module('myApp', ['myApp1', 'myApp2']);
</script>
</body> </html>

2、ng-bind指令

ng-bind指令在绑定的值包含HTML时会转义,为了安全(跨站脚本攻击)

 <!DOCTYPE html>
<html lang="en"> <head>
<meta charset="UTF-8">
<title>ng-bind-html 指令</title>
</head> <body ng-app="myApp" ng-init="username='<h1>shit</h1>'">
<!-- <strong>{{username}}</strong> -->
<!-- ng-bind指令在绑定的值包含HTML时会转义,为了安全(跨站脚本攻击) -->
<strong ng-bind-html="username"></strong>
<script src="bower_components/angular/angular.js"></script>
<script src="bower_components/angular-sanitize/angular-sanitize.js"></script>
<script>
// 使用自定义的模块才可以依赖别的包里面定义模块,angular定义的默认模块没有依赖任何
angular.module('myApp', ['ngSanitize']);
</script>
</body> </html>

3、ng-repeat指令

ng-repeat指令用来编译一个数组重复创建当前元素,如

 <!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>ng-repeat 指令</title>
</head> <body ng-app="myApp"> <ul ng-controller="ListController">
<!-- ng-repeat 会遍历数组中每一个元素,分别创建li -->
<li ng-repeat="item in ledamei track by $index" data-id="{{item.id}}">
<span>{{$first?'开始':''}}</span>
<strong>{{item.name}}</strong>
&nbsp;&nbsp;&nbsp;&nbsp;
<span>{{item.age}}</span>
<span>{{$last?'没有了':''}}</span>
</li>
</ul> <script src="bower_components/angular/angular.js"></script>
<script>
angular.module('myApp', [])
.controller('ListController', ['$scope', function($scope) { $scope.ledamei = []; for (var i = 1; i < 10; i++) {
$scope.ledamei[$scope.ledamei.length] = {
id: i,
name: '乐乐' + i,
age: 20 + i
};
} }]);
</script>
</body> </html>

4、ng-class 指令

ng-class指令可以设置一个键值对,用于决定是否添加一个特定的类名,键为class名,值为bool类型表示是否添加该类名

 <ul class="messages">

     <li ng-repeat="item in messages track by $index" ng-class="{red:item.read}">

         {{item.content}}

     </li>

 </ul>
 <!DOCTYPE html>
<html lang="en"> <head>
<meta charset="UTF-8">
<title>ng-repeat 指令</title>
<style>
.red {
color: red;
} .green {
color: green;
}
</style>
</head> <body ng-app="myApp">
<input type="text" ng-model="lastname">
<ul ng-controller="ListController">
<li ng-repeat="name in students track by $id($index)" ng-class="{red:lastname!=''&&name.startsWith(lastname)}">{{name}}</li>
</ul>
<script src="bower_components/angular/angular.js"></script>
<script>
angular.module('myApp', [])
.controller('ListController', ['$scope', function($scope) { $scope.students = ['邓乐', '赵四', '王明', '张晓', '李三', '李三']; }]);
</script>
</body> </html>

5、ng-show/ng-hide 指令

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

 <ul class="messages">

     <li ng-repeat="item in messages track by $index" ng-show="item.read">

         {{item.content}}

     </li>

 </ul>

6、ng-if是指是否存在DOM元素

7、ng-link/ng-src 指令

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

 <!-- 浏览器在解析HTML时会去请求{{item.url}}文件 -->

 <img src="{{item.url}}">

 <!-- 可以使用ng-src解决该问题 -->

 <img ng-src="{{item.url}}">
 <!DOCTYPE html>
<html lang="en"> <head>
<meta charset="UTF-8">
<title>ng-src</title>
<script src="bower_components/angular/angular.js"></script>
</head> <body ng-app ng-init="imgUrl='22.png'" ng-cloak>
<img ng-src="{{imgUrl}}" alt=""> <a ng-href="{{imgUrl}}">跳转到图片</a>
</body> </html>

8、ng-switch

 <!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>ng-switch 指令</title>
</head>
<body ng-app>
<select ng-model="selected">
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
</select>
<div ng-switch="selected">
<div ng-switch-when="1">
你选择的是1
</div>
<div ng-switch-when="2">
你选择的是2
</div>
<div ng-switch-when="3">
你选择的是3
</div>
<div ng-switch-default>
你什么都没选
</div>
</div> <script src="bower_components/angular/angular.js"></script>
</body>
</html>

9、ng-checked

ng-checkedng-selected 只会做数据到视图的同步,不会做视图到数据的同步

 <!DOCTYPE html>
<html lang="en"> <head>
<meta charset="UTF-8">
<title>ng-xxx 其他指令</title>
</head> <body ng-app>
<p>
<input type="checkbox" ng-model="checked">全选/取消全选</p>
<ul>
<!-- ng-checked 和 ng-selected 只会做数据到视图的同步,不会做视图到数据的同步 -->
<li>选项01
<input type="checkbox" ng-checked="checked">
</li>
<li>选项02
<input type="checkbox" ng-checked="checked">
</li>
<li>选项03
<input type="checkbox" ng-checked="checked">
</li>
<li>选项04
<input type="checkbox" ng-checked="checked">
</li>
<li>选项05
<input type="checkbox" ng-checked="checked">
</li>
</ul>
<script src="bower_components/angular/angular.js"></script>
</body> </html>

10、其他常用指令

ng-model

ng-class

ng-show/ng-hide/ng-if

ng-click

ng-link/ng-src

11、自定义指令

AngularJS中可以通过代码自定义指令:

 myModule.directive('hello', function() {

     return {

         restrict: 'E',

         template: '<h1>Hello world</h1>',

         replace: true

     };

 });

 myApp.directive("ngHover", function() {

     return function(scope, element, attrs) {

         element.bind("mouseenter", function() {

             element.css("background", "yellow");

         });

         element.bind("mouseleave", function() {

             element.css("background", "none");

         });

     }

 });

第215天:Angular---指令的更多相关文章

  1. angular指令深度学习篇

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

  2. Angular指令渗透式理解

    通过一段时间对angular指令的使用,理解了angular指令的意义,下面逐一介绍一下. ng-app:定义一个angualr模块,表示angular作用的范围,如下代码: ng-app在html标 ...

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

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

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

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

  5. 【转】angular指令入坑

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

  6. angular 指令作用域 scope

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

  7. Angular指令1

    Angular的指令 也就是directive,其实就是一WebComponent,以前端的眼光来看,好象很复杂,但是以后端的眼光来看,还是非常简单的.其实就是一个中等水平的类. var myModu ...

  8. angular指令大全

    这篇文章的案例都是来自官方,引用的cdn来自bootcss, 因为angular的官方网站被屏了, 所以要翻, 不过我把整个文档下回来了,方便大家下载可以点击: 打开下载英文版 angular的指令 ...

  9. 初学angular-简单的angular指令

    实现一个简单的input清空内容,且清空对应ngModel 前台部分 <html ng-app="hpapp"> <head> <meta chars ...

  10. 学习angular 指令构造器时遇到的小问题

    在学习angular时,使用模块来为应用添加自己的指令时,遇到了一个问题,演示的代码如下: <!DOCTYPE html> <html> <head> <me ...

随机推荐

  1. cap原则(cap定理)与base理论

    CAP定理c:一致性 Consistency: 分布式系统中,所有数据备份,同一时刻存在一样的值.当在分布式环境中,当一个地方写入返回成功的结果,其他地方也应读取到最新的数据.a:可用性 Availa ...

  2. 菜鸟vimer成长记——目录

    菜鸟vimer成长记——第0章.我眼中的vim学习 菜鸟vimer成长记——第1章.统一概念 菜鸟vimer成长记——第2.0章.模式初探 菜鸟vimer成长记——第2.1章.normal模式 菜鸟v ...

  3. oracle出现无法修改的异常记录

    oracle数据库(PLSQL登录器),修改时遇到无法修改以前的记录. 解决方法: 是因为session正在操作(有锁),出现的假象让你觉得执行了sql却无法显示出修改的数据. 一个操作用户未完成操作 ...

  4. flask入门补充

    在上篇文章提到了json的编码问题.那么Flask是国外开发的框架,没有考虑到中文编码,那么我们就需要自己配置 那么在访问页面的时候会有 get 请求和post  请求.在下边我也会提到.以及没有接触 ...

  5. git pull fatal: refusing to merge unrelated histories

    1.首先我github有个远程仓库,然后我本地有个仓库 本地仓库我新添加了一个文件,然后我去关联(git remote add origin git@github.com:qshilary/gitte ...

  6. 【厚积薄发】Crunch压缩图片的AssetBundle打包

    这是第133篇UWA技术知识分享的推送.今天我们继续为大家精选了若干和开发.优化相关的问题,建议阅读时间10分钟,认真读完必有收获. UWA 问答社区:answer.uwa4d.com UWA QQ群 ...

  7. Netty源码分析第2章(NioEventLoop)---->第6节: 执行select操作

    Netty源码分析第二章: NioEventLoop   第六节: 执行select操作 分析完了selector的创建和优化的过程, 这一小节分析select相关操作 跟到跟到select操作的入口 ...

  8. 铁轨(rails, ACM/ICPC CERC 1997,Uva 514)

    铁轨(rails, ACM/ICPC CERC 1997,Uva 514) 题目描述 某城市有一个火车站,铁轨铺设如图所示.有n节车厢从A方向驶入车站,按进站顺序编号为1~n.你的任务是让它们按照某种 ...

  9. 君学,佳一tvodp文件破解

    tvodp文件破解的意思就是,越过加密部分直接提取内部原始文件,难度较大,方法用U盘刻老毛桃pe,然后电脑启动pe,在pe中打开文件,做提取工作, 本人淘宝破解:https://item.taobao ...

  10. shell之arp命令

    arp: 显示所有的表项. arp -d address: 删除一个arp表项. arp -s address hw_addr: 设置一个arp表项.   常用参数: -a 使用bsd形式输出.(没有 ...