<hello></hello>或者<hello/>2、作为一个元素的属性来使用
<div hello></div>3、作为一个元素的类来使用
<div class="hello"></div>4、作为注释来使用
<!--directive: hello -->注意这里有一个陷阱,就是在“directive: hello”这个的后面要有一个空格,不然的话是没有效果的,同时推荐注释的方法的还是少用,如果非要追求高大上,那就随性吧。既然指令有以上四种表现形式,那么具体他是怎么来定义的呢?
.directive("hello",function(){ return {restrict:"AECM",template:"<button>click me</button>" }})上面就是定义一个指令最简单的代码了,没有之一。在上面的代码中,directive()这个方法定义了一个新的指令,该方法有两个参数,第一个"hello"就是规定指令的名字为hello,第二个参数是返回指令对象的函数。那么在上面的代码中,该函数主要使用了两个属性来定义这个hello指令:template: function () { return "<button>click me</button>"; }但是在一般情况下,template这个属性都会被templateUrl取代掉,用它来指向一个外部的文件地址,所以我们通常把模板放在外部的一个HTML文件中,然后使用templateUrl来指向他。
。var myapp=angular.module("myapp",[]).controller("myctrl",["$scope", function ($scope) { $scope.color="red";}]).directive("hello", function () { return{restrict:"AECM",replace:true,template:"<button ng-click="sayhello()" style="background-color: {{color}}">click me</button>",scope:true,link: function (scope,elements,attrs) { elements.bind("click", function () {elements.css("background-color","blue"); })} }})这里我们为父scope定义了一个color的属性,并赋值为red,在hello指令的scope属性中,我们给了true,所以angular就为这个指令创建了一个继承于父scope的scope,然后在template属性中,我们用{{}}使用了从父scope中继承过来的color属性,所以按钮会是红色的。
,而如果我们需要使用父scope的color属性的时候,我们可以这样写:scope{color:"@color"} <hello color="{{color}}"></hello>这里有两点需要注意:1、scope里的属性color代表的是模板{{}}这个表达式里面的color,两者必须一致。2、scope里的属性color的值,也就是@后面的color,表示的是下面的HTML元素里的属性color,所以这两者也必须一致,当这里的属性名和模板里表达式{{}}里面使用的名称相同的话,就可以省略掉@后面的属性名了,然后写成下面的形式。scope{color:"@"}从指令中scope的值可以看出,指令模板中的表达式{{}}里的color的指向的是当前元素元素的color属性,这个color属性的值就是父scope的属性color的值。父scope把他的color属性值传递给了当前元素的color属性,然后color属性又把值传递给了模板中表达式里的color,这个过程是单向的。.directive("hello", function () { return{restrict:"AECM",replace:true,template:"<button style="background-color: {{color}}">click me</button>",scope:{ color:"="},link: function (scope,elements,attrs) { elements.bind("click", function () {elements.css("background-color","blue");scope.$apply(function () { scope.color="pink";}) })} }})<hello color="color"></hello><input type="text" ng-model="color"/>这里我们给指令的scope中的color属性和父scope中的color属性进行了双向绑定,并且给指令的link函数里,添加了一个单击事件,点击按钮会让按钮的颜色发生变化,并且改变指令scope的color属性的值,再给HTML页面中加了一个input标签,输出或者输入父scope的color属性的值。这里有一个地方需要注意:当前元素的属性名的值不用再加上{{}}这个表达式了,因为这里父scope传递的是一个真实的scope数据模型,而不是简单的字符串,所以这样我们就可以传递简单的字符串、数组、甚至复杂的对象给指令的scope。现在让我们来看看点击这个按钮将会发生什么。
这里我们能看到,按钮的颜色变成了粉色的,说明点击让指令的scope的color属性发生了变化,从而导致按钮的颜色发生了变化。但是这里不仅仅是按钮发生了变化,注意看,input表单里的值也变成了pink,这就说明父scope的color属性也发生了变化。 另外,再让我们来给input里面输入一个颜色,看看发生什么变化。
,可以看出当我们在表单里输入另外一种颜色的时候,按钮的颜色也发生了变化,这就说明指令的scope的color属性被改变了。综上我们可以发现使用"="实现的是双向绑定。var myapp=angular.module("myapp",[]).controller("myctrl",["$scope", function ($scope) { $scope.color="red"; $scope.sayhello= function () {alert("hello"); };}]).directive("hello", function () { return{restrict:"AECM",replace:true,template:"<button ng-click="sayhello()" style="background-color: {{color}}">click me</button>",scope:{ color:"=", sayhello:"&"},link: function (scope,elements,attrs) { elements.bind("click", function () {elements.css("background-color","blue");scope.$apply(function () { scope.color="pink";}) })} }})<hello color="color" sayhello="sayhello()"></hello><input type="text" ng-model="color"/>这里我们也有两个地方需要注意:1、我们不仅需要在模板中使用ng-click指令,绑定上要调用的父scope中的方法,而且要在给当前元素添加一个属性,并且这个属性指向要调用的父scope的方法。2、指令scope的属性sayhello、当前元素的属性sayhello、模板绑定的事件方法名sayhello这三者要一致。那么这样我们就可以点击按钮,弹出一个对话框了。

6、transclude[boolean]属性,这个属性用来让我们规定指令是否可以包含任意内容
.directive("hello", function () { return{restrict:"AECM",replace:true,transclude:true,scope:{},template:"<div ng-transclude></div>", }})<hello> hello <span>{{color}}</span></hello>当他的值为true的时候,
这是页面上输出的值。当为false的时候,页面上将会是空白的。这里有一个地方需要注意,就是<span>{{color}}</span>,这里的color是父scope里的color。并不是指令里的scope的color属性。.directive("hello", function () { return{restrict:"AECM",replace:true,translude:true,template:"<button ng-click="sayhello()" style="background-color: {{color}}">click me</button>",scope:{ color:"=", sayhello:"&"},compile: function (element,attrs) { return function (scope,elements,attrs) {elements.bind("click", function () { elements.css("background-color","blue"); scope.$apply(function () {scope.color="pink"; })}) };} }})现在让我们来点击这个按钮
我们发现,这里点击按钮之后发生的事情和前面用link属性的一样,这其实是没有多少差别的。.directive("hello", function () { return{scope:{},require:"^he",compile: function (element,attrs) { return function (scope,elements,attrs,cntIns) {cntIns.fn() };} }}).directive("he", function () { return {restrict:"AE",scope:{},controller: function ($scope, $compile, $http) { this.fn= function () {alert("hello"); };} }})<he> <hello color="color" sayhello="sayhello()"></hello></he>当页面加载完毕之后,会弹出一个对话框。

好了上面就是我这段时间学习angular,所了解到的指令的知识,就先写到这里了。
以上这篇AngularJS中的指令全面解析(必看)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。