AngularJS Directive - 开场小介绍(转)
Directive其实就是让html变得更强大的一种方法。它可以根据需求对dom变形,或注入行为。
觉得它很神秘么,其实一点儿也不神秘,只要开始使用AngularJS了,就一定在使用着Directive,比如我们在html上写的那些ng-controller,ng-model,ng-show等等都是AngularJS提供的Directive啊~
那到底内部是怎么实现的呢?或者如果觉得AngularJS内置提供的Directive不给力咋办?现在咱们就自己做一个试试看吧~

先来个比较简单的需求,假如我们的应用经常要用到地址信息的输入选项,如果不自定义directive,html要写成这样~
<div class="address">
<label>
国家:<input type="text" ng-model="country" />
</label>
<label>
城市:<input type="text" ng-model="city" />
</label>
<label>
街道详情:<input type="text" ng-model="address" />
</label>
<label>
邮编:<input type="text" ng-model="zipcode" />
</label>
</div>
这样的代码可能要写多次,给维护也添加了复杂度。 如果自定义个地址的directive,代码如下:
之前的html
<div my-address> </div>
抽出来的html模板,名称为address.html
<div class="address">
<label>
国家:<input type="text" ng-model="country" />
</label>
<label>
城市:<input type="text" ng-model="city" />
</label>
<label>
街道详情:<input type="text" ng-model="address" />
</label>
<label>
邮编:<input type="text" ng-model="zipcode" />
</label>
</div>
directive的定义
app.directive("myAddress", function() {
return {
restrict: "A",
templateUrl: "address.html",
replace: true
}
})
命名
可能有人注意到了,在html里标签上定义的属性叫my-address,可是在js里定义directive时写的名字是myAddress,这能对应上么?
其实是可以的,不仅如此,下列格式都可以识别出来~
- my:address
- my-address (推荐)
- my_address
- x-my-address
- data-my-address
但是由于html不区分大小写和标准写法是用中横线-的特性,比较推荐my-address这种写法,既简洁又遵循html的规则。
声明形式限制
restrict: "A" 这一句表示对directive声明形式的限制,一共有四种:
E:<my-address></my-address>Element Name 标签名A:<div my-address="exp"></div>Attribute 属性名(默认值)C:<div class="my-address: exp;"></div>Class 类名M:<!-- directive: my-address exp -->Comment 注释
其实不写也可以,因为如果不写,默认就是restrict: "A"
如果想支持多项,可以写成restrict: "EA",这样就又支持标签的写法,又支持属性的写法
虽然一共有四种可以选择,但后两种并不推荐~
- 类应该更多的是与样式相关,而且将directive名混杂在一群类名里,可读性也不好
- 注释就更不可靠了,将重要的逻辑写在注释里,太容易被忽略了
Html内容模板指定
templateUrl: "address.html"指定了模板的Url路径,如果想直接写html内容也可以用:template: "<div class='address'>blabla</div>"
下面的replace: true表示模板html内容是否会替换<div my-address></div>,还是插入到<div my-address></div>元素里,默认是false
最后
这样一个简单的directive就写好了,其实如果只是想抽html模板的话,还可以用ng-include,相当上上面例子里replace:false的效果~
使用ng-include的版本
1 |
|
貌似更简单。。。那前面说那么多干嘛?!
这不是为了熟悉directive嘛~ -_-|||
AngularJS Directive - 开场小介绍(转)的更多相关文章
- Angularjs directive全面解读(1.4.5)
说到Angularjs directive即指令,可以这么说Angularjs的灵魂就是指令,学会Angularjs指令那么你的Angularjs的武功就修炼了一半了,当然这只是鄙人的一点点独到见解, ...
- 学习AngularJs:Directive指令用法
跟我学AngularJs:Directive指令用法解读(上) http://blog.csdn.net/evankaka/article/details/51232895 跟我学AngularJs: ...
- angularjs directive 实例 详解
前面提到了angularjs的factory,service,provider,这个可以理解成php的model,这种model是不带html的,今天所说的directive,也可以理解成php的mo ...
- 学习AngularJs:Directive指令用法(完整版)
这篇文章主要学习AngularJs:Directive指令用法,内容很全面,感兴趣的小伙伴们可以参考一下 本教程使用AngularJs版本:1.5.3 AngularJs GitHub: http ...
- angularjs directive (自定义标签解析)
angularjs directive (自定义标签解析) 定义tpl <!-- 注意要有根标签 --> <div class="list list-inset" ...
- angularJS之$watch的一个小介绍
现在最近公司项目使用angularJS进行开发:以前也接触过但是不多,趁着现在熟悉回来. 如题,angular中$watch也是我们在开发的时候需要的各种监听: $watch接收3个参数,第一个是对象 ...
- 步入angularjs directive(指令)--点击按钮加入loading状态
今天我终于鼓起勇气写自己的博客了,激动与害怕并存,希望大家能多多批评指导,如果能够帮助大家,也希望大家点个赞!! 用angularjs 工作也有段时间了,总体感觉最有挑战性的还是指令,因为没有指令的a ...
- jQuery和AngularJS的区别小分析
最近一直在研究angularjs,最大的感受就是它和之前的jQuery以及基于jQuery的各种库设计理念完全不同,如果不能认识到这点而对于之前做jQuery开发的程序员,去直接学习angularjs ...
- angularjs directive学习心得
一些常见的错误 在angularjs里,创建directive时,directive的名称应该要使用驼峰式,例如myDirective,而在html里要调用它的时候,就不能用驼峰式了,可以用my-di ...
随机推荐
- (转)[老老实实学WCF] 第二篇 配置WCF
在上一篇中,我们在一个控制台应用程序中编写了一个简单的WCF服务并承载了它.先回顾一下服务端的代码: using System; using System.Collections.Generic; u ...
- 《第一行代码》学习笔记11-活动Activity(9)
1.android:theme,是用于给当前活动指定主题的,Android系统内置很多主题可以选择,@android:style/Theme.Dialog则是 让DialogActivity使用对话框 ...
- 我永远的 dell 15r
陪伴我三年多的15r 让我疯狂过.努力过.更记录了我很多的成长,与很多个瞬间.看到它是有感情的.还记得第一次失去她.我好像失去了自己. 我是一个程序员.每个程序员都有自己的环境配置.不同的软件.就是 ...
- PHP中PDO DEMO
PDO => PHP DATABASE OBJECT 1.Select $dsn = "mysql:host=127.0.0.1;port=3306;dbname=dbname&quo ...
- CF 8D Two Friends 【二分+三分】
三个地点构成一个三角形. 判断一下两个人能否一起到shop然后回家,如果不能: 两个人一定在三角形内部某一点分开,假设沿着直线走,可以将问题简化. 三分从电影院出来时候的角度,在对应的直线上二分出一个 ...
- linux 下配置mysql区分大小写(不区分可能出现找不到表的情况)怎么样使用yum来安装mysql
Linux 默认情况下,数据库是区分大小写的:因此,要将mysql设置成不区分大小写 在my.cof 设置 lower_case_table_names=1(1忽略大小写,0区分大小写) 检查方式:在 ...
- 如何在hadoop中控制map的个数
hadooop提供了一个设置map个数的参数mapred.map.tasks,我们可以通过这个参数来控制map的个数.但是通过这种方式设置map的个数,并不是每次都有效的.原因是mapred.map. ...
- cocos2d-js 入门一 ([isNaN()和isFinite(),字符和Number之间的转化)
isNaN() : 用于检查其参数是否是非数字值.// 提示:是非数字哦.(not a number)document.write(isNaN(0) ) //返回falsedocument.writ ...
- [置顶] Responder一点也不神秘————iOS用户响应者链完全剖析
这篇文章想跟大家分享的主旨是iOS捕获用户事件的各种情况,以及内部封装的一些特殊事件. 我们先从UIButton谈起,UIButton大家使用的太多了,他特殊的地方就在于其内置的普通Default/高 ...
- geoip 添加一列,add_field =>["[geoip][request_time]","%{request_time}"]
"message" => " 10.171.246.184 [11/Sep/2016:14:42:53 +0800] \"GET /wechat/home ...