第215天:Angular---指令
指令(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>
<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-checked 和 ng-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---指令的更多相关文章
- angular指令深度学习篇
angular指令深度学习-过滤器 limitTo ... <body ng-app="app" > <div ng-controller="myCtr ...
- Angular指令渗透式理解
通过一段时间对angular指令的使用,理解了angular指令的意义,下面逐一介绍一下. ng-app:定义一个angualr模块,表示angular作用的范围,如下代码: ng-app在html标 ...
- Angular4 后台管理系统搭建(9) - 用自定义angular指令,实现在服务端验证
最近这段时间发现,北京这用angular4 或 angular2的公司很少.几乎是没有.很担心自己是不是把精力放到了不应该的地方.白耽误了时间.但是随着我对新版angular框架理解的加深.个人感觉a ...
- angular指令之complie和link不得不说的故事
angular指令比较晦涩难懂的就是complie和link字段了,什么时候该用complie?什么时候该用link?总是很难分别清楚.当理解了指令的真正编译原理的时候,就会发现这相当的简单. ng怎 ...
- 【转】angular指令入坑
独立作用域和函数参数 通过使用本地作用域属性,你可以传递一个外部的函数参数(如定义在控制器$scope中的函数)到指令.这些使用&就可以完成.下面是一个例子,定义一个叫做add的本地作用域属性 ...
- angular 指令作用域 scope
转载自:https://segmentfault.com/a/1190000002773689 下面我们就来详细分析一下指令的作用域. 在这之前希望你对AngularJS的Directive有一定的了 ...
- Angular指令1
Angular的指令 也就是directive,其实就是一WebComponent,以前端的眼光来看,好象很复杂,但是以后端的眼光来看,还是非常简单的.其实就是一个中等水平的类. var myModu ...
- angular指令大全
这篇文章的案例都是来自官方,引用的cdn来自bootcss, 因为angular的官方网站被屏了, 所以要翻, 不过我把整个文档下回来了,方便大家下载可以点击: 打开下载英文版 angular的指令 ...
- 初学angular-简单的angular指令
实现一个简单的input清空内容,且清空对应ngModel 前台部分 <html ng-app="hpapp"> <head> <meta chars ...
- 学习angular 指令构造器时遇到的小问题
在学习angular时,使用模块来为应用添加自己的指令时,遇到了一个问题,演示的代码如下: <!DOCTYPE html> <html> <head> <me ...
随机推荐
- C#课后练手
猜拳(三局两胜)请输入您的手势:石头用户手势:石头 电脑手势:剪刀用户胜:1 电脑胜:0 请输入您的手势:石头用户手势:石头 电脑手势:石头用户胜:1 电脑胜: ...
- python 实现字符串的切片功能
'''string切片''' def string_split(stringone,split): m = [] if type(split)!=str: return False if split ...
- 阿超的烦恼 javaScript篇
幼儿园级1-100随机数运算 实现目标 1.点击随机生成两个数并进项随机的四则运算. 2.答案暂时隐藏,等孩子做完题后点击答案处显示答案. 3.背景设置的卡通些,激发孩子阅读兴趣........... ...
- 工作之路---记录LZ如何在两年半的时间内升为PM
引言 之前的伪PM纠结之路已经渐渐结束,LZ也终于正式爬上了PM的位置,对于LZ来说,这个时间比LZ预计的早来了两年半.说起来,两年半的速度已经算是比较快了,但这之中的努力唯有LZ一人知晓.写这篇文章 ...
- 报错:Cannot create PoolableConnectionFactory (The server time zone value 'CST' is unrecognized or represents more than one time zone. You must configure either the server or JDBC driver (via the serverT
报错:Cannot create PoolableConnectionFactory (The server time zone value 'CST' is unrecognized or repr ...
- 使用c语言计算分期贷款折算年化收益率(内部收益率IRR*12)
众所周知,现在银行的分期贷款利率是很有诱惑性人.表面看利率是很低的,例如招行的闪电贷有时给我的利率是4.3% 但是,由于贷款是分期还本的,我手上的本金每月都在减少,到最后一个月时手上只有少量本金,但是 ...
- 利用shell连接服务器
#应用 连接timesten 数据库 host = Linux(ip, 'user', 'pwd') # 传入Ip,用户名,密码host.connect() #主机开启cdsql = host.sen ...
- c#简易学生信息管理系统
在近期的学习中,我们学习了泛型及泛型集合的概念和使用,泛型是c#中的一个重要概念,为了巩固我们学习的成果,我们可以使用一个实例来进行练习 题目及要求 要求使用Windows窗体应用程序,制作出如上图的 ...
- python继承与多继承
1.类与对象里的父类与子类(继承): 类的继承主要是指自子类对于之前父类的方法的继承,如果子类里面写了父类里的方法,则它会将父类里的方法覆盖掉,从而不能再调用到父类的方法. 2.为了解决父类与子类里的 ...
- Unity新版本VR以及SteamVR基础
一.Unity2018新版本VR Unity 简单VRDemo搭建 Unity环境搭建: PlayerSetting设置如下: 启动虚拟现实驱动,sdk选择OpenVR.HTC Vive只支持Ope ...