【AngularJS】——核心特性之指令

      在前两篇文章中介绍了AngularJS三大特性:MVC框架、模块化和依赖注入以及路由机制,今天小编介绍一下AngularJS的另一大特性:指令。


      我们都知道,AngularJS通过指令对HTML达到了一个拓展的作用。指令分为两种,一种是 内置指令,为应用添加功能;另一种是自定义指令,用户可自己定义相关内容。


      1、内置指令

      内置指令是指带有前缀ng-的一些指令,它拓展了HTML。现AngularJS内置指令有63个,如图:


                  

      现列举几个内置指令的应用:

        1)ng-app

        初始化一个AngularJS应用程序,它定义根元素。它会自动初始化或启动加载包含AngularJS应用程序的Web页面的应用程序。它也被用来加载各种AngularJS模块AngularJS应用。在下面的例子中,我们定义默认AngularJS应用使用div元素的ng-app 属性。

<div ng-app="">
...
</div>


        2)ng-model

        ng-model指令定义在AngularJS应用中使用的模型/变量。在下面的例子中,我们定义了一个名为“myModel”的模型。

<div ng-app="">
...
<p>Enter your Name: <input type="text" ng-model="myModel"></p>
</div>

        3)ng-repeat

        ng-repeat 指令重复html元素集合中的每个项目。在下面的例子中,我们已经迭代了数组countries。

<div ng-app="">
...
   <p>List of Countries with locale:</p>
   <ol>
      <li ng-repeat="country in countries">
         {{ 'Country: ' + country.name + ', Locale: ' + country.locale }}
      </li>
   </ol>
</div>

      2、自定义指令

      自定义指令中使用AngularJS扩展HTML的功能。自定义指令使用的“指令”的功能定义。自定义指令只是替换了它被激活的元素。引导过程中AngularJS应用程序找到了匹配的元素,并做好使用自定义指令compile()方法一次活动再处理使用基于指令的范围自定义指令link()方法的元素。 AngularJS提供支持,以下列元素的类型来创建自定义指令。


                          


      以一个简单的Demo展示自定义指令的应用:

<html>
<head>
   <title>Angular JS Custom Directives</title>
</head>
<body>
   <h2>AngularJS Directive Test</h2>
   <div ng-app="mainApp" ng-controller="StudentController">
		<student name="yxm"></student><br/>
		<student name="hcy"></student>
   </div>
   <!-- 引用Google CDN的ng库 -->
   <script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.2.15/angular.min.js"></script>
   <script>
      /*定义一个名为mainApp的module*/
      var mainApp = angular.module("mainApp", []);
	  /*定义名为student的指令*/
      mainApp.directive('student', function() {
         var directive = {};
         directive.restrict = 'E'; //元素
         directive.template = "Student: <b>{{student.name}}</b> , Roll No: <b>{{student.rollno}}</b>";
         
         directive.scope = {
            student : "=name"
         }
		   /*compile函数对模板自身进行转换*/
         directive.compile = function(element, attributes) {
            element.css("border", "1px solid #98FB98");

           /* 每条指令运行link函数*/
            var linkFunction = function($scope, element, attributes) {
               element.html("Student: <b>"+$scope.student.name +"</b> , Roll No: <b>"+$scope.student.rollno+"</b><br/>");
               element.css("background-color", "#00FF7F");
            }

            return linkFunction;
         }

         return directive;
      });
	  
      /*定义控制器以更新范围为指令。在这里,我们使用name属性值作为子的作用域。*/
      mainApp.controller('StudentController', function($scope) {
            $scope.yxm = {};
            $scope.yxm.name = "yxm test";
            $scope.yxm.rollno  = 1;

            $scope.hcy = {};
            $scope.hcy.name = "hcy test";
            $scope.hcy.rollno  = 2;
      });
      
   </script>
</body>
</html>


      效果图:

                          

      同样,也可以使用其它元素类型来创建自定义指令。就不再赘述了。


      结语:

      本篇文章只是简单的介绍了一下指令的类型和简单应用,在下篇文章中,再详细描述一下指令的执行机制,叙述一下compile和link函数是如何工作的。希望大家继续关注。

    

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值