AngularJS 指令
AngularJS 允许您使用名为 Directives 指令的新属性扩展 HTML。
AngularJS 有一组内置指令,为应用程序提供功能。
AngularJS 还允许您定义自己的指令。
AngularJS 指令
AngularJS 指令是带有 ng- 前缀的扩展 HTML 属性。
ng-app 指令初始化 AngularJS 应用程序。
ng-init 指令初始化应用程序数据。
ng-model 指令将 HTML 控件(输入、选择、文本区域)的值绑定到应用程序数据。
有关完整参考,请访问本站的 AngularJS 指令参考。
实例
<!DOCTYPE html><html><script src="https://cdn.bootcdn.net/ajax/libs/angular.js/1.8.2/angular.min.js"></script><body><div ng-app="" ng-init="firstName='John'"><p>在输入框中输入内容:</p><p>名称: <input type="text" ng-model="firstName"></p><p>您输入: {{ firstName }}</p></div></body></html>
ng-app 指令还告诉 AngularJS,<div> 元素是 AngularJS 应用程序的 "所有者"。
数据绑定
在上面的示例中,{{ firstName }} 表达式是 AngularJS 数据绑定表达式。
AngularJS 中的数据绑定将 AngularJS 表达式与 AngularJS 数据绑定。
{{firstName}} 与 ng-model="firstName" 绑定。
在下一个示例中,两个文本字段用两个 ng-model 指令绑定在一起:
实例
<!DOCTYPE html><html><script src="https://cdn.bootcdn.net/ajax/libs/angular.js/1.8.2/angular.min.js"></script><body><div data-ng-app="" data-ng-init="quantity=1;price=5"><h2>费用计算</h2>数量: <input type="number" ng-model="quantity">价格: <input type="number" ng-model="price"><p><b>美元总计:</b> {{quantity * price}}</p></div></body></html>
ng-init 并不常见。在关于控制器的章节中,您将学习如何初始化数据。重复 HTML 元素
ng-repeat 指令重复一个 HTML 元素:
实例
<!DOCTYPE html><html><script src="https://cdn.bootcdn.net/ajax/libs/angular.js/1.8.2/angular.min.js"></script><body><div ng-app="" ng-init="names=['Jani','Hege','Kai']"><p>使用 ng-repeat 循环:</p><ul><li ng-repeat="x in names">{{ x }}</li></ul></div></body></html>
ng-repeat 指令实际上为集合中的每个项目克隆 HTML 元素一次。
ng-repeat 用于对象数组的指令:
实例
<!DOCTYPE html><html><script src="https://cdn.bootcdn.net/ajax/libs/angular.js/1.8.2/angular.min.js"></script><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>
ng-app 指令
ng-app 指令定义 AngularJS 应用程序的 根元素。
ng-app 指令将在加载网页时 自动引导(自动初始化)应用程序。
ng-init 指令
ng-init 指令定义 AngularJS 应用程序的初始值。
通常,您将使用控制器或模块,而不是 ng-init。
稍后,您将了解更多有关控制器和模块的信息。
ng-model 指令
ng-model 指令将 HTML 控件(输入、选择、文本区域)的值绑定到应用程序数据。
ng-model 指令也能够:
- 提供应用程序数据的类型验证(数字、电子邮件、必填项)。
- 提供应用程序数据的状态(无效、脏、接触、错误)。
- 为 HTML 元素提供 CSS 类。
- 将 HTML 元素绑定到 HTML 表单。
在下一章中阅读更多关于 ng-model 指令的信息。
创建一个新指令
除了所有内置的 AngularJS 指令,您还可以创建自己的指令。
通过使用 .directive 功能创建新指令。
要调用新指令,请使用与新指令相同的标记名创建一个 HTML 元素。
在命名指令时,必须使用驼峰命名法,比如 TestDirective,但在调用它时,必须使用 - 分隔符 test-directive:
<!DOCTYPE html><html><script src="https://cdn.bootcdn.net/ajax/libs/angular.js/1.8.2/angular.min.js"></script><body ng-app="myApp"><test-directive></test-directive><script>var app = angular.module("myApp", []);app.directive("TestDirective", function() {return {template : "<h2>由指令生成!</h2>"};});</script></body></html>
可以使用以下命令调用指令:
- 元素名
- 属性
- 样式表名
- 注释
下面的例子都会产生相同的结果:
<!DOCTYPE html><html><script src="https://cdn.bootcdn.net/ajax/libs/angular.js/1.8.2/angular.min.js"></script><body ng-app="myApp"><test-directive></test-directive><script>var app = angular.module("myApp", []);app.directive("TestDirective", function() {return {template : "<h2>由指令生成!</h2>"};});</script></body></html>
<!DOCTYPE html><html><script src="https://cdn.bootcdn.net/ajax/libs/angular.js/1.8.2/angular.min.js"></script><body ng-app="myApp"><div test-directive=""></div><script>var app = angular.module("myApp", []);app.directive("TestDirective", function() {return {template : "<h2>由指令生成!</h2>"};});</script></body></html>
<!DOCTYPE html><html><script src="https://cdn.bootcdn.net/ajax/libs/angular.js/1.8.2/angular.min.js"></script><body ng-app="myApp"><div class="test-directive"></div><script>var app = angular.module("myApp", []);app.directive("TestDirective", function() {return {restrict : "C",template : "<h2>由指令生成!</h2>"};});</script><p><strong>备注:</strong> 必须将值 "C" 添加到restrict属性,才能从类名调用指令。</p></body></html>
<!DOCTYPE html><html><script src="https://cdn.bootcdn.net/ajax/libs/angular.js/1.8.2/angular.min.js"></script><body ng-app="myApp"><!-- directive: test-directive --><script>var app = angular.module("myApp", []);app.directive("TestDirective", function() {return {restrict : "M",replace : true,template : "<h2>由指令生成!</h2>"};});</script><p><strong>备注:</strong> 在本例中,我们添加了 <strong>replace</strong> 属性,否则注释将不可见。</p><p><strong>备注:</strong> 必须将值 "M" 添加到<strong>restrict</strong>属性,才能从注释中调用指令。</p></body></html>
限制
您可以将指令限制为仅由某些方法调用。
<!DOCTYPE html><html><script src="https://cdn.bootcdn.net/ajax/libs/angular.js/1.8.2/angular.min.js"></script><body ng-app="myApp"><test-directive></test-directive><div test-directive=""></div><script>var app = angular.module("myApp", []);app.directive("TestDirective", function() {return {restrict : "A",template : "<h2>由指令生成!</h2>"};});</script><p><strong>备注:</strong> 通过将 <strong>restrict</strong> 属性设置为 "A",只有具有 "TestDirective" 属性的 HTML 元素调用了该指令。</p></body></html>
有效限制值有:
- E 表示元素名称
- A 表示属性
- C 表示样式表名
- M 表示注释
默认情况下,该值为 EA,这意味着元素名和属性名都可以调用该指令。