AngularJs自定义指令详解(4) - transclude
transclude默认值为false,如果设置 transclude为true,那么相应地,必须在模板代码中加入ng-transclude指令。
先看个例子:
- <!DOCTYPE html>
- <html>
- <head lang="en">
- <meta charset="UTF-8">
- <script src="../lib/angular-1.3.16/angular.min.js"></script>
- <script src=""></script>
- <title></title>
- <script language="JavaScript">
- angular.module('app',[])
- .directive('myDirective',function(){
- return{
- template:'<div>\
- <h2>大标题</h2>\
- </div>'
- };
- });
- </script>
- </head>
- <body ng-app="app">
- <div my-directive >
- <ul>
- <li>小标题1</li>
- <li>小标题2</li>
- </ul>
- </div>
- </body>
- </html>
输出:
大标题
见鬼!小标题全不见了!审查元素看看:
魂淡,全丢没了!
没办法,出动transclude!看代码:
- <!DOCTYPE html>
- <html>
- <head lang="en">
- <meta charset="UTF-8">
- <script src="../lib/angular-1.3.16/angular.min.js"></script>
- <script src=""></script>
- <title></title>
- <script language="JavaScript">
- angular.module('app',[])
- .directive('myDirective',function(){
- return{
- template:'<div>\
- <h2>大标题</h2>\
- <span ng-transclude></span>\
- </div>',
- transclude:true
- };
- });
- </script>
- </head>
- <body ng-app="app">
- <div my-directive >
- <ul>
- <li>小标题1</li>
- <li>小标题2</li>
- </ul>
- </div>
- </body>
- </html>
输出:
大标题
- 小标题1
- 小标题2
审查元素看看:
再看看这个指令嵌套的例子:
- <!DOCTYPE html>
- <html>
- <head lang="en">
- <meta charset="UTF-8">
- <script src="../lib/angular-1.3.16/angular.min.js"></script>
- <script src=""></script>
- <title></title>
- <script language="JavaScript">
- angular.module('app',[])
- .directive('myDirective',function(){
- return{
- restrict:'E',
- template:'<div>\
- <h2>大标题</h2>\
- <span ng-transclude></span>\
- </div>',
- transclude:true
- };
- })
- .directive('myDirective2',function(){
- return{
- restrict:'E',
- template:'<div>\
- <h3>中标题</h3>\
- <span ng-transclude></span>\
- </div>',
- transclude:true
- };
- });
- </script>
- </head>
- <body ng-app="app">
- <my-directive>
- <my-directive2>
- <ul>
- <li>小标题1</li>
- <li>小标题2</li>
- </ul>
- </my-directive2>
- </my-directive>
- </body>
- </html>
输出:
大标题
中标题
- 小标题1
- 小标题2
可以尝试把指令里的transclude:true去掉,输出肯定有问题,所以两个指令里的transclude:true都是必需的。
AngularJs自定义指令详解(4) - transclude的更多相关文章
- AngularJs自定义指令详解(1) - restrict
下面所有例子都使用angular-1.3.16.下载地址:http://cdn.bootcss.com/angular.js/1.3.16/angular.min.js 既然AngularJs快要发布 ...
- AngularJs自定义指令详解(6) - controller、require
在前面文章中提到一旦声明了require,则链接函数具有第四个参数:controller. 可见require和controller是配合使用的. 在自定义指令中使用controller,目的往往是要 ...
- AngularJs自定义指令详解(2) - template
一些用于定义行为的指令,可能不需要使用template参数. 当指定template参数时,其值可以是一个字符串,表示一段HTML文本,也可以是一个函数,这函数接受两个参数:tElement和tAtt ...
- AngularJs自定义指令详解(5) - link
在指令中操作DOM,我们需要link参数,这参数要求声明一个函数,称之为链接函数. 写法: link: function(scope, element, attrs) { // 在这里操作DOM} 如 ...
- AngularJs自定义指令详解(9) - terminal
例子: <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8 ...
- AngularJs自定义指令详解(8) - priority
priority 默认值为0. 当一个元素上声明两个指令,而且它们的priority一样,谁先被调用?这个需要分情况讲.下面先给个例子: <!DOCTYPE html> <html& ...
- AngularJs自定义指令详解(7) - multiElement
multiElement不太常用,从下面这个例子可以大致看出它的作用: <!DOCTYPE html> <html> <head lang="en"& ...
- AngularJs自定义指令详解(3) - scope
我们之所以要定义指令,目的是重用指令.假设有这么一个应用场景:在同一个html里使用了两次my-directive,第一个my-directive要展示的是Hello World,第二个my-dire ...
- AngularJs自定义指令详解(10) - 执行次序
代码: <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8 ...
随机推荐
- python已字典为元素的数组排序
dict = [ {','name':'b'}, {','name':'c'}, {','name':'a'}, {','name':'g'}, {','name':'f'} ] dict.sort( ...
- 几种方法实现ajax请求内容时使用浏览器后退和前进功能
ajax是一个非常好玩的小东西,不过用起来也会存在一些问题. 我们可以利用ajax进行无刷新改变文档内容,但是没办法去修改URL,即无法实现浏览器的前进与后退.书签的收藏功能. 利用location的 ...
- NRF51822之IIC(MEMS_LIS2DH12)
在上篇介绍了OLED的II以写操作为主,没有进行读取操作.所以在现再补充读取的操作. 我在此以LIS2DH为例子 uint8_t temp; lis2dh_read_registers(LIS2DH_ ...
- Python:利用内建函数将字符串转化为整数
使用内建函数raw_input()内建函数,它读取标准输入,并将读取到的数据赋值给指定的变量.我们可以使用int()内建函数将用户输入的字符串转换为整数: >>> user = ra ...
- matlab 按照某列以行为单位进行排序
a=[2 1 3 21 44 3] 然后按照第一列进行排序 sortrows(a,1) ans = 1 4 2 1 3 2 4 3 如要逆序,可以逆序读矩阵即可
- SRM 146 DIV2 1000
Problem Statement A well-known riddle goes like this: Four people are crossing an old bridge. T ...
- raw,cow,qcow,qcow2镜像的比较
在linux下,虚拟机的选择方式有很多,比如vmware for linux,virtual box,还有qemu,在以前,使用qemu的人不多,主要是使用起来有些麻烦,但现在随着Openstack的 ...
- asp.net前台代码中引入namespace的方法
<%@ import NameSpace="System.Data.OleDb" %>
- ubuntu用apt安装apache2时,出现E:未发现软件包 apache2
解决方法:使用sudo apt-get update更新软件包 更新软件包失败,多半使用因为源文件不干净,在/etc/apt下重新自己新写一份源文件 然后执行 sudo apt-get update
- UML大战需求分析阅读笔记2
全面深入理解客户的业务,才能帮助我们准确的把握客户的需要.而在理解客户业务的同时,我们往往需要做业务流程再造(BPR:Business Process Reengineering)的工作.BPR简单说 ...