AngularJS Directive指令中transclude属性

定义指令对象时,可以不添加transclude属性,如果添加该属性,那么它的属性值是布尔类型的,默认值为false,表示不开启属性,如果设置为true值时,则开启了该属性;当开启了transclude属性后,就可以在模板中通过ng-transclude方式替换指令元素中的内容。假如指令元素中的内容如下

<div>hello!</div>

指令模板中的内容代码如下

<h3>I am template</h3>

指令元素中,调用ng-transclude指令后,原有指令元素中的内容则变成如下形式。

<div ng-transclude>hello!<h3>I am template</h3></div>

在添加transclude属性并开启成功后,可以将调用指令后的元素内容替换为指令中的模板内.
如果模板中的内容没有元素标签,而是纯文本内容,那么,在替换时,则会自动添加一个<span>标签,不仅仅是内容的替换,还可以通过变量来传递数据。

如下示例:设置指令对象中的transclude属性

  1. 功能描述
    在自定义指令的模板中,添加一个文本输入框,并通过ng-model绑定名为“text”的变量。另外,再添加一个<div>元素,并添加ng-transclude属性,通过该属性替换<div>元素的内容
  2. 代码如下:
<!DOCTYPE html>
<html ng-app="a8_3">
<head>
    <title>设置指令对象中的transclude属性</title>
    <script src="/node_modules/angular/angular.min.js"></script>
    <style type="text/css">
        .frame {
            padding: 2px 8px;
            margin: 0px;
            font-size: 12px;
            width: 320px;
            background-color: #eee;
        }

        .tip {
            font-size: 9px;
            color: #666;
            margin: 3px 5px;
        }
    </style>
    <script type="text/ng-template" id="tpl">
        <div class="frame">
            <input type="text" ng-model="text" />
            <div ng-transclude class="tip"></div>
        </div>
    </script>
</head>
<body>
    <ts-tplscipt>{{text}}</ts-tplscipt>   
    <script type="text/javascript">
        var app = angular.module('a8_3', [])   
        .directive('tsTplscipt', function () {
            return {
                restrict: 'EAC',
                templateUrl: 'tpl',
                transclude: true
            };
        });
    </script>
</body>
</html>
  1. 程序运行如下
    在这里插入图片描述
  2. 源码分析
    定义了一个名为“tsTplscipt”的指令。添加“transclude”属性,并将它的值设置为true,表示开启该属性的功能。
    然后,在指令对应模板的元素中,通过添加“ng-transclude”属性的方式,调用“transclude”属性的功能,,该元素中的内容将会被指令元素原有内容所替代,效果见上图。
  3. TIP:
    指令中使用“transclude”属性的作用是为了保留指令元素中原有的内容。在通常情况下,使用自定义的指令元素后,原有内容都被指令中的模板替换,因此,为了保留这部分内容,引入了“transclude”属性,通过在模板中给元素添加“ng-transclude”属性,就可以获取指令元素中原有的内容。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值