AngularJS 指令

AngularJS 允许您使用名为 Directives 指令的新属性扩展 HTML。

AngularJS 有一组内置指令,为应用程序提供功能。

AngularJS 还允许您定义自己的指令。


AngularJS 指令

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

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

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

ng-model 指令将 HTML 控件(输入、选择、文本区域)的值绑定到应用程序数据。

有关完整参考,请访问本站的 AngularJS 指令参考

实例
  1. <!DOCTYPE html>
  2. <html>
  3. <script src="https://cdn.bootcdn.net/ajax/libs/angular.js/1.8.2/angular.min.js"></script>
  4. <body>
  5. <div ng-app="" ng-init="firstName='John'">
  6. <p>在输入框中输入内容:</p>
  7. <p>名称: <input type="text" ng-model="firstName"></p>
  8. <p>您输入: {{ firstName }}</p>
  9. </div>
  10. </body>
  11. </html>

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


数据绑定

在上面的示例中,{{ firstName }} 表达式是 AngularJS 数据绑定表达式。

AngularJS 中的数据绑定将 AngularJS 表达式与 AngularJS 数据绑定。

{{firstName}} 与 ng-model="firstName" 绑定。

在下一个示例中,两个文本字段用两个 ng-model 指令绑定在一起:

实例
  1. <!DOCTYPE html>
  2. <html>
  3. <script src="https://cdn.bootcdn.net/ajax/libs/angular.js/1.8.2/angular.min.js"></script>
  4. <body>
  5. <div data-ng-app="" data-ng-init="quantity=1;price=5">
  6. <h2>费用计算</h2>
  7. 数量: <input type="number" ng-model="quantity">
  8. 价格: <input type="number" ng-model="price">
  9. <p><b>美元总计:</b> {{quantity * price}}</p>
  10. </div>
  11. </body>
  12. </html>
使用 ng-init 并不常见。在关于控制器的章节中,您将学习如何初始化数据。

重复 HTML 元素

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

实例
  1. <!DOCTYPE html>
  2. <html>
  3. <script src="https://cdn.bootcdn.net/ajax/libs/angular.js/1.8.2/angular.min.js"></script>
  4. <body>
  5. <div ng-app="" ng-init="names=['Jani','Hege','Kai']">
  6. <p>使用 ng-repeat 循环:</p>
  7. <ul>
  8. <li ng-repeat="x in names">
  9. {{ x }}
  10. </li>
  11. </ul>
  12. </div>
  13. </body>
  14. </html>

ng-repeat 指令实际上为集合中的每个项目克隆 HTML 元素一次。

ng-repeat 用于对象数组的指令:

实例
  1. <!DOCTYPE html>
  2. <html>
  3. <script src="https://cdn.bootcdn.net/ajax/libs/angular.js/1.8.2/angular.min.js"></script>
  4. <body>
  5. <div ng-app="" ng-init="names=[
  6. {name:'Jani',country:'Norway'},
  7. {name:'Hege',country:'Sweden'},
  8. {name:'Kai',country:'Denmark'}]">
  9. <p>循环对象:</p>
  10. <ul>
  11. <li ng-repeat="x in names">
  12. {{ x.name + ', ' + x.country }}</li>
  13. </ul>
  14. </div>
  15. </body>
  16. </html>
AngularJS 非常适合数据库 CRUD(创建-读取-更新-删除)应用程序。

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:

  1. <!DOCTYPE html>
  2. <html>
  3. <script src="https://cdn.bootcdn.net/ajax/libs/angular.js/1.8.2/angular.min.js"></script>
  4. <body ng-app="myApp">
  5. <test-directive></test-directive>
  6. <script>
  7. var app = angular.module("myApp", []);
  8. app.directive("TestDirective", function() {
  9. return {
  10. template : "<h2>由指令生成!</h2>"
  11. };
  12. });
  13. </script>
  14. </body>
  15. </html>

可以使用以下命令调用指令:

  • 元素名
  • 属性
  • 样式表名
  • 注释

下面的例子都会产生相同的结果:

  1. <!DOCTYPE html>
  2. <html>
  3. <script src="https://cdn.bootcdn.net/ajax/libs/angular.js/1.8.2/angular.min.js"></script>
  4. <body ng-app="myApp">
  5. <test-directive></test-directive>
  6. <script>
  7. var app = angular.module("myApp", []);
  8. app.directive("TestDirective", function() {
  9. return {
  10. template : "<h2>由指令生成!</h2>"
  11. };
  12. });
  13. </script>
  14. </body>
  15. </html>
  1. <!DOCTYPE html>
  2. <html>
  3. <script src="https://cdn.bootcdn.net/ajax/libs/angular.js/1.8.2/angular.min.js"></script>
  4. <body ng-app="myApp">
  5. <div test-directive=""></div>
  6. <script>
  7. var app = angular.module("myApp", []);
  8. app.directive("TestDirective", function() {
  9. return {
  10. template : "<h2>由指令生成!</h2>"
  11. };
  12. });
  13. </script>
  14. </body>
  15. </html>
  1. <!DOCTYPE html>
  2. <html>
  3. <script src="https://cdn.bootcdn.net/ajax/libs/angular.js/1.8.2/angular.min.js"></script>
  4. <body ng-app="myApp">
  5. <div class="test-directive"></div>
  6. <script>
  7. var app = angular.module("myApp", []);
  8. app.directive("TestDirective", function() {
  9. return {
  10. restrict : "C",
  11. template : "<h2>由指令生成!</h2>"
  12. };
  13. });
  14. </script>
  15. <p><strong>备注:</strong> 必须将值 "C" 添加到restrict属性,才能从类名调用指令。</p>
  16. </body>
  17. </html>
  1. <!DOCTYPE html>
  2. <html>
  3. <script src="https://cdn.bootcdn.net/ajax/libs/angular.js/1.8.2/angular.min.js"></script>
  4. <body ng-app="myApp">
  5. <!-- directive: test-directive -->
  6. <script>
  7. var app = angular.module("myApp", []);
  8. app.directive("TestDirective", function() {
  9. return {
  10. restrict : "M",
  11. replace : true,
  12. template : "<h2>由指令生成!</h2>"
  13. };
  14. });
  15. </script>
  16. <p><strong>备注:</strong> 在本例中,我们添加了 <strong>replace</strong> 属性,否则注释将不可见。</p>
  17. <p><strong>备注:</strong> 必须将值 "M" 添加到<strong>restrict</strong>属性,才能从注释中调用指令。</p>
  18. </body>
  19. </html>

限制

您可以将指令限制为仅由某些方法调用。

  1. <!DOCTYPE html>
  2. <html>
  3. <script src="https://cdn.bootcdn.net/ajax/libs/angular.js/1.8.2/angular.min.js"></script>
  4. <body ng-app="myApp">
  5. <test-directive></test-directive>
  6. <div test-directive=""></div>
  7. <script>
  8. var app = angular.module("myApp", []);
  9. app.directive("TestDirective", function() {
  10. return {
  11. restrict : "A",
  12. template : "<h2>由指令生成!</h2>"
  13. };
  14. });
  15. </script>
  16. <p><strong>备注:</strong> 通过将 <strong>restrict</strong> 属性设置为 "A",只有具有 "TestDirective" 属性的 HTML 元素调用了该指令。</p>
  17. </body>
  18. </html>

有效限制值有:

  • E 表示元素名称
  • A 表示属性
  • C 表示样式表名
  • M 表示注释

默认情况下,该值为 EA,这意味着元素名和属性名都可以调用该指令。

分类导航