AngularJS 指令详细介绍


Posted in Javascript onJuly 27, 2016

AngularJS 指令

AngularJS 通过被称为 指令 的新属性来扩展 HTML。

AngularJS 通过内置的指令来为应用添加功能。

AngularJS 允许你自定义指令。

AngularJS 指令

AngularJS 指令是扩展的 HTML 属性,带有前缀 ng-。

ng-app 指令初始化一个 AngularJS 应用程序。

ng-init 指令初始化应用程序数据。

ng-model 指令把元素值(比如输入域的值)绑定到应用程序。

完整的指令内容可以参阅 AngularJS 参考手册。

AngularJS 实例

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<script src="http://apps.bdimg.com/libs/angular.js/1.4.6/angular.min.js"></script> 
</head>
<body>

<div ng-app="" ng-init="firstName='John'">

<p>在输入框中尝试输入:</p>
<p>姓名: <input type="text" ng-model="firstName"></p>
<p>你输入的为: {{ firstName }}</p>

</div>

</body>
</html>

 运行结果:

在输入框中尝试输入:

姓名: 

你输入的为: John

 ng-app 指令告诉 AngularJS,<div> 元素是 AngularJS 应用程序 的"所有者"。

注意: 一个网页可以包含多个运行在不同元素中的 AngularJS 应用程序。

数据绑定

上面实例中的 {{ firstName }} 表达式是一个 AngularJS 数据绑定表达式。

AngularJS 中的数据绑定,同步了 AngularJS 表达式与 AngularJS 数据。

{{ firstName }} 是通过 ng-model="firstName" 进行同步。

在下一个实例中,两个文本域是通过两个 ng-model 指令同步的:

AngularJS 实例

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<script src="http://apps.bdimg.com/libs/angular.js/1.4.6/angular.min.js"></script> 
</head>
<body>

<div data-ng-app="" data-ng-init="quantity=1;price=5">

价格计算器 

数量: <input type="number" ng-model="quantity">
价格: <input type="number" ng-model="price">

<p><b>总价:</b> {{quantity * price}}</p>

</div>

</body>
</html>

 运行结果:

价格计算器

 数量:  价格: 

总价: 5

注意: 使用 ng-init 不是很常见。您将在控制器一章中学习到一个更好的初始化数据的方式。

重复 HTML 元素

ng-repeat 指令会重复一个 HTML 元素:

AngularJS 实例

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<script src="http://apps.bdimg.com/libs/angular.js/1.4.6/angular.min.js"></script> 
</head>
<body>

<div data-ng-app="" data-ng-init="names=['Jani','Hege','Kai']">
 <p>使用 ng-repeat 来循环数组</p>
 <ul>
 <li data-ng-repeat="x in names">
  {{ x }}
 </li>
 </ul>
</div>

</body>
</html>

使用 ng- repeat 来循环数组

  • Jani
  • Hege
  • Kai

 ng-repeat 指令用在一个对象数组上:

AngularJS 实例

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<script src="http://apps.bdimg.com/libs/angular.js/1.4.6/angular.min.js"></script> 
</head>
<body>

<div ng-app="" ng-init="names=[
{name:'Jani',country:'Norway'},
{name:'Hege',country:'Sweden'},
{name:'Kai',country:'Denmark'}]">

<p>循环对象:</p>
<ul>
 <li ng-repeat="x in names">
 {{ x.name + ', ' + x.country }}</li>
</ul>

</div>

</body>
</html>

 循环对象:

  • Jani, Norway
  • Hege, Sweden
  • Kai, Denmark

 Note AngularJS 完美支持数据库的 CRUD(增加Create、读取Read、更新Update、删除Delete)应用程序。

把实例中的对象想象成数据库中的记录。

ng-app 指令

ng-app 指令定义了 AngularJS 应用程序的 根元素。

ng-app 指令在网页加载完毕时会自动引导(自动初始化)应用程序。

稍后您将学习到 ng-app 如何通过一个值(比如 ng-app="myModule")连接到代码模块。

ng-init 指令

ng-init 指令为 AngularJS 应用程序定义了 初始值。

通常情况下,不使用 ng-init。您将使用一个控制器或模块来代替它。

稍后您将学习更多有关控制器和模块的知识。

ng-model 指令

ng-model 指令 绑定 HTML 元素 到应用程序数据。

ng-model 指令也可以:

为应用程序数据提供类型验证(number、email、required)。

为应用程序数据提供状态(invalid、dirty、touched、error)。

为 HTML 元素提供 CSS 类。

绑定 HTML 元素到 HTML 表单。

ng-repeat 指令

ng-repeat 指令对于集合中(数组中)的每个项会 克隆一次 HTML 元素。

创建自定义的指令

除了 AngularJS 内置的指令外,我们还可以创建自定义指令。

你可以使用 .directive 函数来添加自定义的指令。

要调用自定义指令,HTML 元素上需要添加自定义指令名。

使用驼峰法来命名一个指令, runoobDirective, 但在使用它时需要以 - 分割, runoob-directive:

AngularJS 实例

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<script src="http://apps.bdimg.com/libs/angular.js/1.4.6/angular.min.js"></script> 
</head>
<body>

<body ng-app="myApp">

<runoob-directive></runoob-directive>

<script>
var app = angular.module("myApp", []);
app.directive("runoobDirective", function() {
 return {
  template : "自定义指令!"
 };
});
</script>

</body>

</body>
</html>

 运行结果:

 自定义指令!

你可以通过以下方式来调用指令:

元素名
属性
类名
注释

以下实例方式也能输出同样结果:

元素名

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<script src="http://apps.bdimg.com/libs/angular.js/1.4.6/angular.min.js"></script> 
</head>
<body>

<body ng-app="myApp">

<runoob-directive></runoob-directive>

<script>
var app = angular.module("myApp", []);
app.directive("runoobDirective", function() {
 return {
  template : "自定义指令!"
 };
});
</script>

</body>

</body>
</html>

 运行结果:

 自定义指令!

属性:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<script src="http://apps.bdimg.com/libs/angular.js/1.4.6/angular.min.js"></script> 
</head>
<body>

<body ng-app="myApp">

<div runoob-directive></div>

<script>
var app = angular.module("myApp", []);
app.directive("runoobDirective", function() {
 return {
  template : "自定义指令!"
 };
});
</script>

</body>

</body>
</html>

 运行结果:

 自定义指令!

类名:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<script src="http://apps.bdimg.com/libs/angular.js/1.4.6/angular.min.js"></script> 
</head>
<body ng-app="myApp">

<div class="runoob-directive"></div>

<script>
var app = angular.module("myApp", []);
app.directive("runoobDirective", function() {
 return {
  restrict : "C",
  template : "自定义指令!"
 };
});
</script>

<p><strong>注意:</strong> 你必须设置 <b>restrict</b> 的值为 "C" 才能通过类名来调用指令。</p>

</body>
</html>

 自定义指令!

注意: 你必须设置 restrict 的值为 "C" 才能通过类名来调用指令。

 注释:

 

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<script src="http://apps.bdimg.com/libs/angular.js/1.4.6/angular.min.js"></script> 
</head>
<body ng-app="myApp">

<!-- directive: runoob-directive -->

<script>
var app = angular.module("myApp", []);
app.directive("runoobDirective", function() {
 return {
  restrict : "M",
  replace : true,
  template : "自定义指令!"
 };
});
</script>

<p><strong>注意:</strong> 我们需要在该实例添加 <strong>replace</strong> 属性, 否则评论是不可见的。</p>

<p><strong>注意:</strong> 你必须设置 <b>restrict</b> 的值为 "M" 才能通过注释来调用指令。</p>

</body>
</html>

  运行结果:

自定义指令!

注意: 我们需要在该实例添加 replace 属性, 否则评论是不可见的。

注意: 你必须设置 restrict 的值为 "M" 才能通过注释来调用指令。

 限制使用

你可以限制你的指令只能通过特定的方式来调用。

实例

通过添加 restrict 属性,并设置只值为 "A", 来设置指令只能通过属性的方式来调用:

实例代码:

<!DOCTYPE html>
<html><head>
<meta charset="utf-8">
<script src="http://apps.bdimg.com/libs/angular.js/1.4.6/angular.min.js"></script> 
</head>
<body ng-app="myApp">

<runoob-directive></runoob-directive>

<div runoob-directive></div>

<script>
var app = angular.module("myApp", []);
app.directive("runoobDirective", function() {
 return {
  restrict : "A",
  template : "自定义指令!"
 };
});
</script>

<p><strong>注意:</strong> 通过设置 <strong>restrict</strong> 属性值为 "A" 来设置指令只能通过 HTML 元素的属性来调用。</p>

</body>
</html>

 运行结果:

 自定义指令!

注意: 通过设置 restrict 属性值为 "A" 来设置指令只能通过 HTML 元素的属性来调用。

 restrict 值可以是以下几种:

E 只限元素名使用
A 只限属性使用
C 只限类名使用
M 只限注释使用

restrict 默认值为 EA, 即可以通过元素名和属性名来调用指令。

 以上就是对AngularJS 指令 资料整理,后续继续补充

Javascript 相关文章推荐
纯js实现的论坛常用的运行代码的效果
Jul 15 Javascript
JavaScript-RegExp对象只能使用一次问题解决方法
Jun 23 Javascript
jquery实现拖拽调整Div大小
Jan 30 Javascript
JavaScript 正则表达式中global模式的特性
Feb 25 Javascript
基于javascript实现九宫格大转盘效果
May 28 Javascript
jQuery实现区域打印功能代码详解
Jun 17 Javascript
Three.js学习之正交投影照相机
Aug 01 Javascript
jQuery获取选中单选按钮radio的值
Dec 27 Javascript
webpack 2的react开发配置实例代码
Jul 28 Javascript
vue router-link传参以及参数的使用实例
Nov 10 Javascript
JavaScript Dom 绑定事件操作实例详解
Oct 02 Javascript
基于JS实现父组件的请求服务过程解析
Oct 14 Javascript
js中遍历Map对象的方法
Jul 27 #Javascript
angular.js分页代码的实例
Jul 27 #Javascript
jQuery基于函数重载实现自定义Alert函数样式的方法
Jul 27 #Javascript
jquery动态遍历Json对象的属性和值的方法
Jul 27 #Javascript
移动端翻页插件dropload.js(支持Zepto和jQuery)
Jul 27 #Javascript
js中遍历对象的属性和值的方法
Jul 27 #Javascript
js中的关联数组与普通数组详解
Jul 27 #Javascript
You might like
第五节 克隆 [5]
2006/10/09 PHP
php4的session功能评述(三)
2006/10/09 PHP
自动分页的不完整解决方案
2007/01/12 PHP
PHP生成带有雪花背景的验证码
2008/09/28 PHP
php如何解决无法上传大于8M的文件问题
2014/03/10 PHP
PHP中文编码小技巧
2014/12/25 PHP
php实现读取手机客户端浏览器的类
2015/01/09 PHP
PHP判断字符串长度的两种方法很实用
2015/09/22 PHP
prototype 1.5 &amp; scriptaculous 1.6.1 学习笔记
2006/09/07 Javascript
javascript 简单高效判断数据类型 系列函数 By shawl.qiu
2007/03/06 Javascript
js no-repeat写法 背景不重复
2009/03/18 Javascript
JavaScript CSS修改学习第三章 修改样式表
2010/02/19 Javascript
JS简单随机数生成方法
2016/09/05 Javascript
使用PBFunc在Powerbuilder中支付宝当面付款功能
2016/10/01 Javascript
Node.js查找当前目录下文件夹实例代码
2017/03/07 Javascript
微信小程序图片横向左右滑动案例
2017/05/19 Javascript
JS基于开关思想实现的数组去重功能【案例】
2019/02/18 Javascript
echarts统计x轴区间的数值实例代码详解
2019/07/07 Javascript
js+for循环实现字符串自动转义的代码(把后面的字符替换前面的字符)
2020/12/24 Javascript
python通过floor函数舍弃小数位的方法
2015/03/17 Python
python基于xmlrpc实现二进制文件传输的方法
2015/06/02 Python
Python写入CSV文件的方法
2015/07/08 Python
简介Python的collections模块中defaultdict类型的用法
2016/07/07 Python
Python脚本实现Web漏洞扫描工具
2016/10/25 Python
python:pandas合并csv文件的方法(图书数据集成)
2018/04/12 Python
python中resample函数实现重采样和降采样代码
2020/02/25 Python
Python多线程:主线程等待所有子线程结束代码
2020/04/25 Python
浅谈keras通过model.fit_generator训练模型(节省内存)
2020/06/17 Python
韩国CJ食品专卖网:CJonmart
2016/09/11 全球购物
英国最大的女士服装零售商:Bonmarché
2017/08/17 全球购物
施华洛世奇加拿大官网:SWAROVSKI加拿大
2018/06/03 全球购物
英国Office鞋店德国网站:在线购买鞋子、靴子和运动鞋
2018/12/19 全球购物
线程问题:wait()方法是定义在哪个类里面
2015/07/07 面试题
白酒营销策划方案
2014/08/17 职场文书
2015年教师学期工作总结
2015/04/30 职场文书
2016年春季运动会加油稿
2015/07/22 职场文书