摘要:自定義指令中有很多內(nèi)置指令,一般都是以開頭的比如等等。本文介紹的自定義指令的用法。該參數(shù)的意思是替換指令的內(nèi)容,更改上面的例子。將屬性綁定到父控制器的域中學(xué)習(xí)概念多指令中的參數(shù)中增加了的值和的點擊函數(shù)。
自定義指令
angularjs中有很多內(nèi)置指令,一般都是以ng開頭的;比如:ng-app,ng-click,ng-repeat等等。本文介紹angularjs的自定義指令的用法。
指令的定義首先在html標(biāo)簽處設(shè)置ng-app的屬性值,然后在js文件中就可以調(diào)用angular.module得到一個module,最后就可以用module.directive定義一個指令。代碼如下:
html文件
directive
js文件
var app = angular.module("directive",[]);
app.directive("myDirective",function(){
return {
restrict:"A",
require:true,
template:"hello angular",
};
});
這個例子只使用了directive的最簡單的參數(shù)配置,下面是一個詳細(xì)的參數(shù)配置列表
app.directive("myDirective", function factory(injectables) { return { restrict: string,//指令的使用方式,包括標(biāo)簽,屬性,類,注釋 priority: number,//指令執(zhí)行的優(yōu)先級 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){...},//定義與其他指令進行交互的接口函數(shù) require: string,//指定需要依賴的其他指令 link: function postLink(scope, iElement, iAttrs) {...},//以編程的方式操作DOM,包括添加監(jiān)聽器等 compile: function compile(tElement, tAttrs, transclude){ return: { pre: function preLink(scope, iElement, iAttrs, controller){...}, post: function postLink(scope, iElement, iAttrs, controller){...} } } }; });
下面介紹幾個常用的參數(shù)
restrict四個值"A","E","C","M",分別代碼屬性,標(biāo)簽,類,注釋,如下:
restrict:"A" restrict:"E"restrict:"C" restrict:"M"
只測試了A和E的值,感興趣的朋友可以測試一下其他。
template 和 templateUrl這兩個參數(shù)只需要設(shè)置一個就行。
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 新建一個作用域,該作用域繼承父作用域 javascript對象
當(dāng)scope為javascript對象時,鍵值對的形式定義。直接看例子吧!
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的值是一個function,一般用在在dom上綁定動作的。請看下面實現(xiàn)的一個折疊面板的例子。
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的點擊函數(shù)。
最后,再看一個多個折疊面板的例子
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路由機制"} ]; }); 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)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/79163.html
摘要:自定義指令中有很多內(nèi)置指令,一般都是以開頭的比如等等。本文介紹的自定義指令的用法。該參數(shù)的意思是替換指令的內(nèi)容,更改上面的例子。將屬性綁定到父控制器的域中學(xué)習(xí)概念多指令中的參數(shù)中增加了的值和的點擊函數(shù)。 自定義指令 angularjs中有很多內(nèi)置指令,一般都是以ng開頭的;比如:ng-app,ng-click,ng-repeat等等。本文介紹angularjs的自定義指令的用法。 指令...
摘要:點擊我啊當(dāng)屬性為空時,點擊的時候頁面不會刷新了,我們再也不需要這樣寫了點擊我啊一般和指令結(jié)合使用點擊我啊你點擊我了一般和標(biāo)簽結(jié)合使用。使用了就就可以避免出現(xiàn)這種問題。如果鏈接中有表達式,就使用代替 a 點擊我啊 當(dāng)href屬性為空時,點擊的時候頁面不會刷新了,我們再也不需要這樣寫了 點擊我啊 一般和ng-click指令結(jié)合使用 #html 點擊我啊 #scr...
摘要:引言指令可以說是的核心,而其開發(fā)也是比較困難的,本文主要介紹指令的一些參數(shù)和的綁定策略。指令執(zhí)行的優(yōu)先級,用于多個指令同時作用于同一個元素時。改變父會影響指令,而改變指令不會影響父。在父和指令之間建立雙向綁定。 引言 指令(Directive)可以說是 AngularJS 的核心,而其開發(fā)也是比較困難的,本文主要介紹指令的一些參數(shù)和scope的綁定策略。 參數(shù) 從 AngularJS ...
摘要:新增的日期選擇器。類型必填必填最小長度最大長度正則匹配正則匹配更新觸發(fā)即使沒有使用校驗屬性,只要數(shù)據(jù)不符合格式,就會被更新成。 input[text] input一般和ngModel結(jié)合使用來實現(xiàn)雙向綁定,同時angular提供了很多表單校驗的指令 required 必填 ngRequired 必填(ngRequired可以控制是否是必填校驗) ngMinlength 最小長度...
摘要:適用標(biāo)簽所有觸發(fā)條件單擊適用標(biāo)簽所有觸發(fā)條件雙擊適用標(biāo)簽觸發(fā)條件失去焦點適用標(biāo)簽觸發(fā)條件獲取焦點適用標(biāo)簽觸發(fā)條件更新輸入框的內(nèi)容改變并不代表的值更新。如果按一個鍵很久才松開,發(fā)生的事件為。 ngClick 適用標(biāo)簽:所有觸發(fā)條件:單擊 #html click me click me #script angular.module(learnModule, []) ...
閱讀 3265·2023-04-26 01:31
閱讀 1904·2023-04-25 22:08
閱讀 3456·2021-09-01 11:42
閱讀 2833·2019-08-30 12:58
閱讀 2176·2019-08-29 18:31
閱讀 2440·2019-08-29 17:18
閱讀 3071·2019-08-29 13:01
閱讀 2559·2019-08-28 18:22