摘要:自定義指令中有很多內(nèi)置指令,一般都是以開(kāi)頭的比如等等。本文介紹的自定義指令的用法。該參數(shù)的意思是替換指令的內(nèi)容,更改上面的例子。將屬性綁定到父控制器的域中學(xué)習(xí)概念多指令中的參數(shù)中增加了的值和的點(diǎn)擊函數(shù)。
自定義指令
angularjs中有很多內(nèi)置指令,一般都是以ng開(kāi)頭的;比如:ng-app,ng-click,ng-repeat等等。本文介紹angularjs的自定義指令的用法。
指令的定義首先在html標(biāo)簽處設(shè)置ng-app的屬性值,然后在js文件中就可以調(diào)用angular.module得到一個(gè)module,最后就可以用module.directive定義一個(gè)指令。代碼如下:
html文件
directive
js文件
var app = angular.module("directive",[]);
app.directive("myDirective",function(){
return {
restrict:"A",
require:true,
template:"hello angular",
};
});
這個(gè)例子只使用了directive的最簡(jiǎn)單的參數(shù)配置,下面是一個(gè)詳細(xì)的參數(shù)配置列表
app.directive("myDirective", function factory(injectables) { return { restrict: string,//指令的使用方式,包括標(biāo)簽,屬性,類(lèi),注釋 priority: number,//指令執(zhí)行的優(yōu)先級(jí) template: string,//指令使用的模板,用HTML字符串的形式表示 templateUrl: string,//從指定的url地址加載模板 replace: bool,//是否用模板替換當(dāng)前元素,若為false,則append在當(dāng)前元素上 transclude: bool,//是否將當(dāng)前元素的內(nèi)容轉(zhuǎn)移到模板中 scope: bool or object,//指定指令的作用域 controller: function controllerConstructor($scope, $element, $attrs, $transclude){...},//定義與其他指令進(jìn)行交互的接口函數(shù) require: string,//指定需要依賴(lài)的其他指令 link: function postLink(scope, iElement, iAttrs) {...},//以編程的方式操作DOM,包括添加監(jiān)聽(tīng)器等 compile: function compile(tElement, tAttrs, transclude){ return: { pre: function preLink(scope, iElement, iAttrs, controller){...}, post: function postLink(scope, iElement, iAttrs, controller){...} } } }; });
下面介紹幾個(gè)常用的參數(shù)
restrict四個(gè)值"A","E","C","M",分別代碼屬性,標(biāo)簽,類(lèi),注釋?zhuān)缦拢?/p>
restrict:"A" restrict:"E"restrict:"C" restrict:"M"
只測(cè)試了A和E的值,感興趣的朋友可以測(cè)試一下其他。
template 和 templateUrl這兩個(gè)參數(shù)只需要設(shè)置一個(gè)就行。
transclude該參數(shù)的意思是替換指令的內(nèi)容,更改上面的例子。html更改部分
hello angular
js更改部分
app.directive("myDirective",function(){ return { restrict:"A", require:true, transclude:true,//增加transclude參數(shù)的設(shè)置 template:"scope",//將指令的內(nèi)容替換到span標(biāo)簽下 }; });
false 默認(rèn)值。使用父作用域作為自己的作用域 true 新建一個(gè)作用域,該作用域繼承父作用域 javascript對(duì)象
當(dāng)scope為javascript對(duì)象時(shí),鍵值對(duì)的形式定義。直接看例子吧!
html:
directive {{text}}
js:
var app = angular.module("directive",[]); app.directive("myDirective",function(){ return { restrict:"A", template:"link{{mytitle}}", require:true, replace:true, transclude:true, //將etitle屬性綁定到父控制器的scope域中 scope:{ mytitle:"=etitle" }, } }); app.controller("directive",function($scope){ $scope.title = "學(xué)習(xí)"; $scope.text = "angular js概念多"; });
link的值是一個(gè)function,一般用在在dom上綁定動(dòng)作的。請(qǐng)看下面實(shí)現(xiàn)的一個(gè)折疊面板的例子。
directive {{text}}
var app = angular.module("directive",[]); app.directive("expander",function(){ return { restrict:"E", template:"{{mytitle}}", require:true, replace:true, transclude:true, //將etitle屬性綁定到父控制器的scope域中 scope:{ mytitle:"=etitle" }, link: function(scope,element,attr,accordionCtrl){ scope.showText = false; scope.toggleText = function(){ scope.showText = ! scope.showText; } } } }); app.controller("directive",function($scope){ $scope.title = "angular 學(xué)習(xí)"; $scope.text = "angular js概念多"; });
expander指令中的link參數(shù)中增加了showText的值和toggleText的點(diǎn)擊函數(shù)。
最后,再看一個(gè)多個(gè)折疊面板的例子
directive {{expander.text}}
ng-repeat便利expanders的所有元素
var app = angular.module("directive",[]); app.directive("expander",function(){ return { restrict:"E", template:"{{mytitle}}", require:"^?accordion", replace:true, transclude:true, //將etitle屬性綁定到父控制器的scope域中 scope:{ mytitle:"=etitle" }, link: function(scope,element,attr,accordionCtrl){ scope.showText = false; accordionCtrl.addExpander(scope); scope.toggleText = function(){ scope.showText = ! scope.showText; accordionCtrl.getOpened(scope); } } } }); app.controller("directive",function($scope){ $scope.expanders = [ {title:"angular",text:"angular js概念多"}, {title:"react",text:"react + reduce + ui路由機(jī)制"} ]; }); app.directive("accordion",function(){ return { restrict:"E", template:"", replace:true, transclude:true, controller:function(){ var expanders = []; this.getOpened = function(selectExpander){ angular.forEach(expanders,function(e){ if (selectExpander != e){ e.showText = false; } }); } this.addExpander = function(e){ expanders.push(e); } } } });
demo源碼地址
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/49817.html
摘要:自定義指令中有很多內(nèi)置指令,一般都是以開(kāi)頭的比如等等。本文介紹的自定義指令的用法。該參數(shù)的意思是替換指令的內(nèi)容,更改上面的例子。將屬性綁定到父控制器的域中學(xué)習(xí)概念多指令中的參數(shù)中增加了的值和的點(diǎn)擊函數(shù)。 自定義指令 angularjs中有很多內(nèi)置指令,一般都是以ng開(kāi)頭的;比如:ng-app,ng-click,ng-repeat等等。本文介紹angularjs的自定義指令的用法。 指令...
摘要:點(diǎn)擊我啊當(dāng)屬性為空時(shí),點(diǎn)擊的時(shí)候頁(yè)面不會(huì)刷新了,我們?cè)僖膊恍枰@樣寫(xiě)了點(diǎn)擊我啊一般和指令結(jié)合使用點(diǎn)擊我啊你點(diǎn)擊我了一般和標(biāo)簽結(jié)合使用。使用了就就可以避免出現(xiàn)這種問(wèn)題。如果鏈接中有表達(dá)式,就使用代替 a 點(diǎn)擊我啊 當(dāng)href屬性為空時(shí),點(diǎn)擊的時(shí)候頁(yè)面不會(huì)刷新了,我們?cè)僖膊恍枰@樣寫(xiě)了 點(diǎn)擊我啊 一般和ng-click指令結(jié)合使用 #html 點(diǎn)擊我啊 #scr...
摘要:引言指令可以說(shuō)是的核心,而其開(kāi)發(fā)也是比較困難的,本文主要介紹指令的一些參數(shù)和的綁定策略。指令執(zhí)行的優(yōu)先級(jí),用于多個(gè)指令同時(shí)作用于同一個(gè)元素時(shí)。改變父會(huì)影響指令,而改變指令不會(huì)影響父。在父和指令之間建立雙向綁定。 引言 指令(Directive)可以說(shuō)是 AngularJS 的核心,而其開(kāi)發(fā)也是比較困難的,本文主要介紹指令的一些參數(shù)和scope的綁定策略。 參數(shù) 從 AngularJS ...
摘要:新增的日期選擇器。類(lèi)型必填必填最小長(zhǎng)度最大長(zhǎng)度正則匹配正則匹配更新觸發(fā)即使沒(méi)有使用校驗(yàn)屬性,只要數(shù)據(jù)不符合格式,就會(huì)被更新成。 input[text] input一般和ngModel結(jié)合使用來(lái)實(shí)現(xiàn)雙向綁定,同時(shí)angular提供了很多表單校驗(yàn)的指令 required 必填 ngRequired 必填(ngRequired可以控制是否是必填校驗(yàn)) ngMinlength 最小長(zhǎng)度...
摘要:適用標(biāo)簽所有觸發(fā)條件單擊適用標(biāo)簽所有觸發(fā)條件雙擊適用標(biāo)簽觸發(fā)條件失去焦點(diǎn)適用標(biāo)簽觸發(fā)條件獲取焦點(diǎn)適用標(biāo)簽觸發(fā)條件更新輸入框的內(nèi)容改變并不代表的值更新。如果按一個(gè)鍵很久才松開(kāi),發(fā)生的事件為。 ngClick 適用標(biāo)簽:所有觸發(fā)條件:?jiǎn)螕?#html click me click me #script angular.module(learnModule, []) ...
閱讀 2357·2021-11-23 09:51
閱讀 2010·2021-10-14 09:43
閱讀 2780·2021-09-27 13:35
閱讀 1161·2021-09-22 15:54
閱讀 2511·2021-09-13 10:36
閱讀 3818·2019-08-30 15:56
閱讀 3415·2019-08-30 14:09
閱讀 1724·2019-08-30 12:57