angularJS中自定义指令
学习了angularJS一周,但是大部分时间被自定义指令占用了。博主表示自学互联网好心塞的,发现问题的视觉很狭窄,这比解决问题要更难。这篇文章首先介绍了自定义,然后介绍了在使用自定义指令遇到的问题。
代码模板:
var myModule = angular.module("myModule",[]);
myModule.directive('directiveName',function(){
return{ restrict:string,
template:string,
templateUrl:string, replace:boolean,
transclude:boolean,
scope:bollean 或 object,
link:function(scope,element,attrs){ },
compile:function(element,attrs,transclude){ } ...
}
.directive('指令名', [参数1,参数2,… function(形参1’, 形参2’,…) {}])//该参数是固定的。
第一个参数是指令的名字。定义指令的名字,应该使用驼峰命名法,使用时用-连接。
第二个参数使用一个数组,这是为了防止压缩代码后转义。数组的最后一个元素是一个函数。
restrict:指定如何在模板中使用自定义指令,可取E、A、C、M中的一个或任意组合。默认值为A。
E:表示元素的名称;A:表示元素的属性;C:表示CSS中的class;M:表示注释。
元素和标签使用:
div ng-controller="InController">
<!-- inputdirct作为属性使用 -->
<div add-one="name" add-two="name" inputdirct class="div1"> </div>
</br></br>
<!-- inputdirct作为标签使用 -->
<inputdirct add-one="name" add-two="name"></inputdirct>
</div>
template:指令的内联模板;
template:指令的内联模板的url;
replace:若取值伪true,模板(template)替换指令所在的元素;若取为false,把模板(template)放在指令所在元素的内部。默认值为false。
transclude:把指令元素的子元素移到指令内联模板的内部。
scope : false:自定义指令的scope对象就是指令所在的scope对象(作用域) true:自定义指令建立了一个scope对象,并继承了外层的scope。
object:自定义指令创建了一个scope对象,不继承外层的scope,该scope与外层scope隔离。
自定义指令scope通信:通过传递属性名映射的方式把父scope中指定的属性传递给这个独立的scope。
绑定方式如下:
(1)@:单向文本绑定,传递一个字符串值。当父作用域属性改变时,隔离的scope中的属性值随着变化;当隔离的scope中的属性值改变时,父作用域的属性值不随着变化。
(2)= :双向绑定,传递父作用域的属性,传递的数据类型可以是字符串、数组、对象等。当父作用域属性改变时,隔离的scope中的属性值会发生变化;当隔离的scope中的属性发生变化时,父作用域的属性也会发生变化。
(3)&:执行父作用预计中的函数。
分析:@和=区别
<div ng-controller="InController">
<inputdirct add-one="name" add-two="name"></inputdirct>
</div>
<script src="bower_components/angular/angular.js"></script>
<script>
var app = angular.module("App",[]);
// 控制器
app.controller('InController',['$scope',function($scope){
// $scope.inputdate = '';
$scope.name='LiShuyi';//控制器中给name赋值‘Lishuyi’,添加到属性add-one和add-two中 $scope.$watchCollection('name',function(now,old){console.log(now)}); }]);
// 自定义指令
app.directive("inputdirct",function(){
return{
restrict : 'EA',
scope:{addOne:'@',
addTwo:'='},
template:'<span>使用@单向文本绑定{{addOne}}</span></br>\
<span>使用=双向文本绑定{{addTwo}}</span>',
// 分别使用@和=引用add-one和add-two,通过浏览器的输出结果可以发现,@输出的di元素中add-one属性的值,而=输出的是在控制器中赋值的name。
} });
compile、link:这两个选项关系到AngularJS的生命周期。
angularJS中自定义指令的更多相关文章
- AngularJS中的指令全面解析(转载)
说到AngularJS,我们首先想到的大概也就是双向数据绑定和指令系统了,这两者也是AngularJS中最为吸引人的地方.双向数据绑定呢,感觉没什么好说的,那么今天我们就来简单的讨论下AngularJ ...
- 带你走近AngularJS - 创建自定义指令
带你走近AngularJS系列: 带你走近AngularJS - 基本功能介绍 带你走近AngularJS - 体验指令实例 带你走近AngularJS - 创建自定义指令 ------------- ...
- AngularJS中自定义有关一个表格的Directive
本篇体验在AngularJS中自定义一个有关表格的Directive.表格的需求包括: ● 表格结构 <table> <thead> <tr> ...
- vue中自定义指令
//vue中自定义指令 //使用 Vue.directive(id, [definition]) 定义全局的指令 //参数1:指令的名称.注意,在定义的时候,指令的名称前面,不需要加 v-前缀; 但是 ...
- 走进AngularJs(四)自定义指令----(中)
上一篇简单介绍了自定义一个指令的几个简单参数,restrict.template.templateUrl.replace.transclude,这几个理解起来相对容易很多,因为它们只涉及到了表现,而没 ...
- AngularJS笔记--自定义指令
在前端开发中, 我们会遇到很多地方都会用到同一种类型的控件.AngularJS提供了自定义指令功能,我们可以在指令里面定义特定的html模板.提供给前台html调用. 一. 指令的简单定义. 下面定 ...
- 走进AngularJs(五)自定义指令----(下)
自定义指令学习有段时间了,学了些纸上谈兵的东西,还没有真正的写个指令出来呢...所以,随着学习的接近尾声,本篇除了介绍剩余的几个参数外,还将动手结合使用各参数,写个真正能用的指令出来玩玩. 我们在自定 ...
- 走进AngularJs(三)自定义指令-----(上)
一.有感而发的一些话 在学习ng之前有听前辈说过,angular上手比较难,初学者可能不太适应其语法以及思想.随着对ng探索的一步步深入,也确实感觉到了这一点,尤其是框架内部的某些执行机制,其复杂程度 ...
- AngularJS中的指令
欢迎大家讨论与指导 : ) 前言 当AngularJS中的内置指令不能满足我们的需求,或者当我们需要创建一个能够用于多个AngularJS程序的自包含的功能单元时,我们应该创建自定义指令来满足需求. ...
随机推荐
- 如何在JSTL中获取数组或者list对象的索引值(index)
<c:forEach items="${productList}" var="products" varStatus="status" ...
- IImage--factory
<?php /* 实例4 */ /* 使用工厂类解析图像工作 */ interface IImage { function getWidth(); function getHeight(); f ...
- 《Java并发编程的艺术》留给自己以后看的笔记
<Java并发编程的艺术>这本书特别好,和<深入了解JAVA虚拟机>有一拼,建议做java的都看看,下面全部都是复制书中的部分内容,主要目的是做个笔记,方便以后遇到问题能找到. ...
- Data Structure Binary Tree: Largest Independent Set Problem
http://www.geeksforgeeks.org/largest-independent-set-problem/ #include <iostream> #include < ...
- ubuntu下单网卡绑定多个IP
第一种方式静态修改. 进入 /etc/network/ 目录下.修改interfaces文件. # The primary network interfaceauto eth0iface eth0 i ...
- 【三】MongoDB文档的CURD操作
一.插入文档 使用insert方法插入文档到一个集合中,如果集合不存在创建集合,有以下几种方法: db.collection.insertOne({}):(v3.2 new) #插入一个文档到集合中 ...
- 如何拯救一台glibc被干掉的Linux服务器
原文: 如何拯救一台glibc被干掉的Linux服务器? 首先如果 libc.so.6 没有被删除, 直接使用LD_PRELOAD就可以恢复 LD_PRELOAD=/lib64/libc-2.12.s ...
- HDU 1255 覆盖的面积 (线段树扫描线+面积交)
自己YY了一个的写法,不过时间复杂度太高了,网上的想法太6了 题意:给你一些矩阵,求出矩阵的面积并 首先按照x轴离散化线段到线段树上(因为是找连续区间,所以段建树更加好做). 然后我们可以想一下怎样 ...
- node.js定时任务:node-schedule的使用
安装 npm install node-schedule 使用方法 1:确定时间 例如:2014年2月14日,15:40执行 var schedule = require("node-sch ...
- Linux-tcpdump command
简介 用简单的话来定义tcpdump,就是:dump the traffic on a network,根据使用者的定义对网络上的数据包进行截获的包分析工具. tcpdump可以将网络中传送的数据包的 ...