Angualr的指令入门

对于Angular,指令是很重要,也是它的特色部分,
1.指令的作用:实现语义化标签
我们常用的html标签是这样的,

<div>你好,我是angularjs</div>

而使用AngularJS的directive(指令)机制,我们可以实现这样的东西:

<hello>你好,我是angularjs</hello>

类似于xml的格式,其实从原理上讲,它只不过是将定义的标签转化成相应的html标签,或者也可以说是替换。
2.简单实例

<!doctype html>
<html ng-app="app">

<head>
    <meta charset="UTF-8">
    <title>Angular</title>
    <script src="/an/js/1.3.20/angular.js"></script>
    <script src="js/app.js"></script>
</head>
<body>
    <hello></hello>
</body>
</html>

对于以上代码里面的标签,浏览器显然是不认识的,它唯一能做的事情就是无视这个标签。那么,为了让浏览器能够认识这个标签,我们需要使用Angular来定义一个hello指令(本质上说就是自己来把这种玩意儿替换成浏览器能识别的那些标准HTML标签)。
来看一下js代码

var app = angular.module("app", []);
app.directive('hello',function(){
    return {
         restrict: 'E',
        template:'<div>你好,我是angular</div>',
        replace: true
    };
});
<!--'hello'是指你自定义的标签,temlate是指你要转换的html标签-->

运行的结果和实际解析的标签结构如下
这里写图片描述

可以看到,这个东东已经被

你好,我是angular
这个标签替换掉了,这也是以上JS代码里面replace:true这行配置的作用,代码里面的template配置 项当然就是我们要的div标签啦,至于restrict:’E’这个配置项的含义,请看

字母声明风格示例
E元素<my-directive></my-directive>
A属性<div my-directive></div>
C样式类<div class="my-directive"></div>
M注释类<!--directive:my-directive-->

以上就是对于restrict这个属性的解释。
3.实例2:transclude(变换)
看一下js代码

var app = angular.module("app", []);
app.directive('hello',function(){
    return {
         restrict: 'E',
        template:'<div>你好,我是angular<span ng-transclude></span></div>',
         transclude: true
    };
});

html代码如下

<!doctype html>
<html ng-app="app">

<head>
    <meta charset="UTF-8">
    <title>app</title>
    <script src="/an/js/1.3.20/angular.js"></script>
    <script src="/an/js/1.3.20/angular-route.js"></script>
    <script src="/an/js/1.3.20/angular-animate.js"></script>
    <script src="js/app.js"></script>
    <script src="js/controller.js"></script>
</head>

<body>
    <hello>
        <span>这是原始内容</span>
    </hello>
</body>

</html>

显示效果如下
这里写图片描述
和第一个例子对比,这个例子的JS和HTML代码都略有不同,JS代码里面多了一个transclude: true,HTML代码里面在内部出现了子标签。

按照我们在第一个例子中的说法,指令的作用是把我们自定义的语义化标签替换成浏览器能够认识的HTML标签。那好,如果我们自定义的标签内部出现了子标签,就需要用transclude来处理。

对于当前这个例子,transclude的作用可以简化地理解成:把标签替换成我们所编写的HTML模板,但是标签内部的内容保持不变。

很显然,由于我们没有加replace:true选项,所以标签还在,没有被替换掉。同时,通过这个例子你还还会发现一 个暗藏的属性,那就是浏览器实际上非常智能,虽然它并不认识这个标签,但是页面没有出错,它只是默默地把这个标签忽略掉了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值