这一节我们主要看一下replace,transclude,restrict这三个参数

1.replace

可取值:bool

默认为:true

对于replace属性,设置为false表示原有指令标识不会被替换,设置为true的时候 原有指令被替换,咱们看一个例子:

js

newsApp.directive('helloDirective', function() {
return {
template: '<div>hello directive</div>',
replace: true
}
});

html:

<section>
<div hello-directive> </div>
</section>

执行后,发现原有指令标识被替换。

2.transclude

可取值:bool

默认为false,

当transclude为true时,指令作用的元素内部的内容就可以不被清除掉,但是只用transclude是不够的,我们需要配合template使用:看一个例子

js

newsApp.directive('helloDirective', function() {
return {
template: '<div><span>hello directive</span><div ng-transclude></div></div>',
transclude: true
}
});

html

<section>
<div hello-directive>
<div>我是原内容</div>
</div>
</section>

执行后结果:

 审查源代码=》:

可见,原内容被保留了下来,并且被装进了我们在template里面定义的一个ng-transclude的容器里面

3.restrict

可取值:E,A,C,M

默认值为:A

该参数的作用在于,指令在以什么样的方式作用dom元素,可以组合使用,比如:restrict:'EAC',这样就支持了三种引入方式

E:element(元素)

A:attribute(属性)

C:class(类)

M:注释

比如指令:helloDirective

我可以用这么几种方式展示:

第一种:以属性(A)方式作用于dom元素,默认为A,所以可以不写

js

newsApp.directive('helloDirective', function() {
return {
template: '<div><span>hello directive</span><div ng-transclude></div></div>',
transclude: true,
restrict:'A'
}
});

HTML

<section>
<div hello-directive>
<div>我是原内容</div>
</div>
</section>

第二种:以元素(E)方式作用于dom元素

js

newsApp.directive('helloDirective', function() {
return {
template: '<div><span>hello directive</span><div ng-transclude></div></div>',
transclude: true,
restrict:'E'
}
});

html:

<section>
<hello-world>
<div>我是原内容</div>
</hello-world>
</section>

第三种:以类(C)方式作用于dom元素

js

newsApp.directive('helloDirective', function() {
return {
template: '<div><span>hello directive</span><div ng-transclude></div></div>',
transclude: true,
restrict:'C'
}
});

html:

<section>
<div class="{{hello-directive}}">
<div>我是原内容</div>
</div>
</section>

第四种:注释(M)的方式作用于dom元素

js

newsApp.directive('helloDirective', function() {
return {
template: '<div><span>hello directive</span><div ng-transclude></div></div>',
transclude: true,
restrict:'M',
link:function(){
alert("Has");
}
}
});

html

<section>
<div>我是原有内容</div>
<!--directive:hello-directive-->
</section>

结果输出后发现,html里面应该显示的hello directive没变,

但是 link函数起作用了,如约弹出来了“Has",

这是因为 注释的方式引入的指令时不会修改dom元素的,只会作用于compile和link函数

angularjs指令系统系列课程(3):替换replace,内容保留transclude,作用方式restrict的更多相关文章

  1. angularjs指令系统系列课程(1):目录

    angularjs里面有一套十分强大的指令系统 比如内置指令:ng-app,ng-model,ng-repeat,ng-init,ng-bind等等 从现在开始我们讲解AngularJS自定义指令, ...

  2. angularjs指令系统系列课程(5):控制器controller

    这一节我们来说一下controller这个参数 一.指令控制器的配置方法: 对于指令我有两种配置路由的方式:1.在html中直接引用,2,在指令的controller参数里定义 第一种:在html中直 ...

  3. angularjs指令系统系列课程(2):优先级priority,模板template,模板页templateUrl

    今天我们先对 priority,template,templateUrl进行学习 1.priority 可取值:int 作用:优先级 一般priority默认为0,数值越大,优先级越高.当一个dom元 ...

  4. angularjs指令系统系列课程(4):作用域Scope

    指令的scope对象是一个很重要,很复杂的对象,我们这一节作为重点讲解 可取值: 1.false(默认), 2.true, 3.{}(object) 1.false:默认值,不创建新的作用域 2.tr ...

  5. ASP.NET MVC框架开发系列课程 (webcast视频下载)

    课程讲师: 赵劼 MSDN特邀讲师 赵劼(网名“老赵”.英文名“Jeffrey Zhao”,技术博客为http://jeffreyzhao.cnblogs.com),微软最有价值专家(ASP.NET ...

  6. angularjs自动化测试系列之jasmine

    angularjs自动化测试系列之jasmine jasmine参考 html <!DOCTYPE html> <html lang="en"> <h ...

  7. handlebars.js 用 <br>替换掉 内容的换行符

    handlebars.js 用 <br>替换掉 内容的换行符 JS: Handlebars.registerHelper('breaklines', function(text) { te ...

  8. solr与.net系列课程(九)solr5.1的配置

    solr与.net系列课程(九)solr5.1的配置 最近一些园友来咨询solr5.1的配置方式,然后我就去官网下载了个最新版本的solr,发现solr5.0以后solr的下载包里的内容发生的变化,移 ...

  9. solr与.net系列课程(五)solrnet的使用

     solr与.net系列课程(五)solrnet的使用 最近因项目比较忙,所以这篇文章出的比较晚,离上一篇文章已经有半个月的时间了,这节课我们来学下一下solr的.net客户端solrnet 出处   ...

随机推荐

  1. ibatis输入多个参数

    ibatis输入多个参数     在ibatis中,会发现其输入参数只能有一个,于是当出现需要进行多个输入参数的时候,就要想点办法了,我看到的有以下两种比较好的方法能够解决这个问题1) 用String ...

  2. Oracle 正则表达式函数-REGEXP_SUBSTR 使用例子

    原文在这 戳 REGEXP_SUBSTR 5个参数 第一个是输入的字符串 第二个是正则表达式 第三个是标识从第几个字符开始正则表达式匹配.(默认为1) 第四个是标识第几个匹配组.(默认为1) 第五个是 ...

  3. Oracle 正则表达式函数-REGEXP_INSTR 使用例子

    原文在这 戳 REGEXP_INSTR 6个参数 第一个是输入的字符串 第二个是正则表达式 第三个是标识从第几个字符开始正则表达式匹配.(默认为1) 第四个是标识第几个匹配组.(默认为1) 第五个是指 ...

  4. Redis与Memcache的区别

    Redis与Memcache的区别 数据类型:  redis数据类型丰富,支持set liset等类型          memcache支持简单数据类型,需要客户端自己处理复杂对象 持久性: red ...

  5. word自定义格式 并下载

    /** * * @param pRun * @param 20 间距 * @param fontSize 字体大小 * @param bold 是否加粗 * @param underLine 是否下划 ...

  6. msysgit之git bash方便的复制粘贴,默认工作目录,窗口大小,提高速度等小窍门

    桌面图标点鼠标右键,选择属性,修改工作目录到自己的git目录: 打开快速编辑,这时候鼠标左键可以随意选取文本,enter键复制.鼠标右键是粘贴.另外,粘贴的快捷键是 inerst键 修改默认窗口大小 ...

  7. 在C#中如何使用资源的方法

    总结一个在C#中如何使用资源的方法:一:使用本地文件1.将本地要加入的资源文本(视频,图片,文本或其它)加入项目,比如我们现在加入一个up.bmp的图片到项目中,且放在文件夹Resources下面,2 ...

  8. WebService "因 URL 意外地以 结束,请求格式无法识别" 的解决方法

    最近在做一个图片上传的功能,js调用用webservice进行异步访问服务器,对于不是经常用webservice的菜鸟来说,经常会遇到以下的问题(起码我是遇到了) 在页面上写了js调用代码如下所示: ...

  9. C# 如何获取当前应用程序的上一级路径

    Server.MapPath 的使用方法 用法: 1.Server.MapPath ("/") 应用程序根目录所在的位置 如 C:\Inetpub\wwwroot\ 2.Serve ...

  10. Andy - 又一款速度流畅的免费安卓 Android 模拟器 (支持手机无线控制电脑模拟器)

    随着 Genymotion.BlueStacks 等电脑上的 Android 模拟器流行起来之后,似乎很多人都发现在电脑上运行使用安卓APP软件.畅玩手机游戏确实很有乐趣. 今天我们又发现了一款全新免 ...