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 相关文章推荐
高性能WEB开发 flush让页面分块,逐步呈现 flush让页面分块,逐步呈现
Jun 19 Javascript
在新窗口打开超链接的方法小结
Apr 14 Javascript
JavaScript子类用Object.getPrototypeOf去调用父类方法解析
Dec 05 Javascript
javascript动画系列之模拟滚动条
Dec 13 Javascript
JavaScript &amp; jQuery完美判断图片是否加载完毕
Jan 08 Javascript
Angular.js中定时器循环的3种方法总结
Apr 27 Javascript
jQuery实现checkbox即点即改批量删除及中间遇到的坑
Nov 11 jQuery
vue router使用query和params传参的使用和区别
Nov 13 Javascript
vue实现在一个方法执行完后执行另一个方法的示例
Aug 25 Javascript
微信小程序实现日历功能
Nov 27 Javascript
快速对接payjq的个人微信支付接口过程解析
Aug 15 Javascript
Javascript执行上下文顺序的深入讲解
Nov 04 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
做个自己站内搜索引擎
2006/10/09 PHP
php 生成随机验证码图片代码
2010/02/08 PHP
PHP imagegrabscreen和imagegrabwindow(截取网站缩略图)的实例代码
2013/11/07 PHP
Zend Framework动作控制器用法示例
2016/12/09 PHP
js中关于String对象的replace使用详解
2011/05/24 Javascript
jQuery的attr与prop使用介绍
2013/10/10 Javascript
jQuery实现伸展与合拢panel的方法
2015/04/30 Javascript
javascript实现点击后变换按钮显示文字的方法
2015/05/13 Javascript
JS实现自定义简单网页软键盘效果代码
2015/11/05 Javascript
Javascript技术栈中的四种依赖注入详解
2016/02/23 Javascript
预防网页挂马的方法总结
2016/11/03 Javascript
基于bootstrap实现多个下拉框同时搜索功能
2017/07/19 Javascript
Three.js实现浏览器变动时进行自适应的方法
2017/09/26 Javascript
基于Axios 常用的请求方法别名(详解)
2018/03/13 Javascript
使用webpack-dev-server处理跨域请求的方法
2018/04/18 Javascript
在Vue中实现随hash改变响应菜单高亮
2020/03/09 Javascript
javaScript实现一个队列的方法
2020/07/14 Javascript
vue 微信分享回调iOS和安卓回调出现错误的解决
2020/09/07 Javascript
[04:26]DOTA2上海特锦赛小组赛第二日 TOP10精彩集锦
2016/02/27 DOTA
python3.0 字典key排序
2008/12/24 Python
Python中str.join()简单用法示例
2018/03/20 Python
python中metaclass原理与用法详解
2019/06/25 Python
关于Flask项目无法使用公网IP访问的解决方式
2019/11/19 Python
Python random库使用方法及异常处理方案
2020/03/02 Python
Python+OpenCV实现图像的全景拼接
2020/03/05 Python
雅诗兰黛香港官网:Estee Lauder香港
2017/09/26 全球购物
美国迪克体育用品商店:DICK’S Sporting Goods
2018/07/24 全球购物
匡威荷兰官方网站:Converse荷兰
2018/10/24 全球购物
一些Solaris面试题
2015/12/22 面试题
预备党员入党思想汇报
2014/01/04 职场文书
学校卫生检查制度
2014/02/03 职场文书
学校联谊活动方案
2014/02/15 职场文书
环保项目建议书
2014/08/26 职场文书
转让协议书范本
2014/09/13 职场文书
材料员岗位职责
2015/02/10 职场文书
优秀创业计划书分享
2019/07/19 职场文书