AngularJS自定義指令

使用.directive()方法來注冊(cè)一個(gè)新指令
傳入兩個(gè)參數(shù)踩官,第一個(gè)參數(shù)傳入一個(gè)字符串吆豹,作為指令的名字哎媚;第二個(gè)參數(shù)是一個(gè)函數(shù)租漂,該函數(shù)返回一個(gè)對(duì)象,返回的對(duì)象中包含了用來定義和配置指令所需的方法和屬性颊糜。

基本使用

創(chuàng)建一個(gè)自定義元素my-directive

// index.html
<my-directive></my-directive>

// app.js
var app = angular.module('myApp', []);
app.directive('myDirective', function() {
    return {
        restrict: 'E',
        template: '<dir>Nari</dir>'
    };
});

創(chuàng)建的指令在html文件中不僅可以用作元素哩治,還可以作為屬性,類或者注釋使用

<my-directive></my-directive>
<div my-directive></div>
<div class="my-directive"></div>
<!--directive:my-directive-->

restrict設(shè)置以哪種方式調(diào)用:元素(E) 衬鱼、屬性(A) 业筏、類(C)、注釋(M)

向指令傳遞數(shù)據(jù) scope: {}

template可接受變量的形式:template: '<dir>{{ varName }}</dir>'
在html文件中鸟赫,可以給指令添加var-name屬性蒜胖,該參數(shù)會(huì)成為指令內(nèi)部作用域的屬性

雙向綁定的問題:如果是在事件處理函數(shù)(event handler)中改變了綁定model,需要手動(dòng)觸發(fā)digest抛蚤,因?yàn)檫@是發(fā)生在angular范圍之外台谢,所以scope無法知道m(xù)odel的變化,如下:

element.on('click', function() {
$scope.modal = newModal;
$scope.$apply();
})

// index.html
<div my-directive var-name="Nari"></div>

// app.js
app.directive('myDirective', function() {
    return {
        restrict: 'A',
        replace: true,
        // 使用隔離作用域岁经,創(chuàng)建指令自己的$scope屬性
        scope: {    
            varName: '@'朋沮,
            varName: '=',
            varName: '&'
        },
        template: '<dir>{{ varName }}</dir>'
    };
});

綁定策略
'@': 表示AngularJS將DOM中var-name屬性的值復(fù)制給新作用域?qū)ο笾械膙arName屬性缀壤,var-name屬性改變樊拓,作用域?qū)ο笾械膙arName屬性會(huì)自動(dòng)更新
'=': 表示在指令的作用域和其他model作用域建立了一個(gè)雙向數(shù)據(jù)綁定
'&': 表示在指令的作用域和其他model作用域進(jìn)行綁定纠亚,調(diào)用其函數(shù)

綁定函數(shù)的傳參方式有兩種:

// 第一種:指令中調(diào)用函數(shù)時(shí)傳入一個(gè)對(duì)象,對(duì)象的屬性名是html中對(duì)應(yīng)的參數(shù)名
// index.html
<div my-directive callback-fun="doSomething(argName)"></div>

// app.js
app.directive('myDirective', function() {
    return {
        restrict: 'A',
        scope: { 
            callbackFun: '&'
        },
        link: function(scope, ele, attrs) {
            // 傳入一個(gè)對(duì)象
            scope.callbackFun({argName: value})
        }
    };
});

// 第二種:html中指定函數(shù)名筋夏,在指令中調(diào)用函數(shù)時(shí)傳參
// index.html
<div my-directive callback-fun="doSomething"></div>

// app.js
app.directive('myDirective', function() {
    return {
        restrict: 'A',
        scope: { 
            callbackFun: '&'
        },
        link: function(scope, ele, attrs) {
            // scope.callbackFun()相當(dāng)于獲取該函數(shù)引用蒂胞,然后正常調(diào)用函數(shù)
            scope.callbackFun()(arg1, arg2, ...)
        }
    };
});
模板 template templateUrl

定義指令模板,
template指定模板HTML字符串
templateUrl可以指定模板路徑或者一個(gè)函數(shù)条篷,函數(shù)可以接受兩個(gè)參數(shù)tElement和tAttrs骗随,并返回一個(gè)代表模板的字符串

引入外部指令 require

查找該值對(duì)應(yīng)的指令,將查找到的指令的控制器注入到當(dāng)前指令中
尋找策略:
拥娄?策略——尋找指令名稱蚊锹,如果沒有找到,link函數(shù)第4個(gè)參數(shù)為null稚瘾;如果沒有牡昆?,則報(bào)錯(cuò)摊欠。
**^ **策略——在自身指令尋找指令名稱的同時(shí)丢烘,向上父元素尋找;如果沒有^些椒,則僅在自身尋找播瞳。

指令控制器 controller controllerAs

可定義一個(gè)匿名函數(shù)或傳入一個(gè)控制器名
指令的控制器和link函數(shù)可以進(jìn)行互換∶飧猓控制器主要是用來提供可在指令間復(fù)用的行為,但link函數(shù)只能在當(dāng)前內(nèi)部指令中定義行為,且無法在指令間復(fù)用赢乓。

controller: function($scope, $element, $attrs){
    // 可以注入一些服務(wù),$scope就是當(dāng)前作用域石窑,$element當(dāng)前指令對(duì)應(yīng)的元素牌芋,$attrs當(dāng)前元素的屬性組成的對(duì)象
}
優(yōu)先級(jí)控制 terminal

可以被設(shè)置為true或false,設(shè)為true時(shí)會(huì)使AngularJS停止運(yùn)行當(dāng)前元素上比本指令優(yōu)先級(jí)低的指令松逊。但同當(dāng)前指令優(yōu)先級(jí)相同的指令還是會(huì)被執(zhí)行

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末躺屁,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子经宏,更是在濱河造成了極大的恐慌犀暑,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,639評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件烁兰,死亡現(xiàn)場(chǎng)離奇詭異耐亏,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)缚柏,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,277評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門苹熏,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事轨域「さⅲ” “怎么了?”我有些...
    開封第一講書人閱讀 157,221評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵干发,是天一觀的道長(zhǎng)朱巨。 經(jīng)常有香客問我,道長(zhǎng)枉长,這世上最難降的妖魔是什么冀续? 我笑而不...
    開封第一講書人閱讀 56,474評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮必峰,結(jié)果婚禮上洪唐,老公的妹妹穿的比我還像新娘。我一直安慰自己吼蚁,他們只是感情好凭需,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,570評(píng)論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著肝匆,像睡著了一般粒蜈。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上旗国,一...
    開封第一講書人閱讀 49,816評(píng)論 1 290
  • 那天枯怖,我揣著相機(jī)與錄音,去河邊找鬼能曾。 笑死度硝,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的寿冕。 我是一名探鬼主播塘淑,決...
    沈念sama閱讀 38,957評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼蚂斤!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起槐沼,我...
    開封第一講書人閱讀 37,718評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤曙蒸,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后岗钩,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體纽窟,經(jīng)...
    沈念sama閱讀 44,176評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,511評(píng)論 2 327
  • 正文 我和宋清朗相戀三年兼吓,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了臂港。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,646評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖审孽,靈堂內(nèi)的尸體忽然破棺而出县袱,到底是詐尸還是另有隱情,我是刑警寧澤佑力,帶...
    沈念sama閱讀 34,322評(píng)論 4 330
  • 正文 年R本政府宣布式散,位于F島的核電站,受9級(jí)特大地震影響打颤,放射性物質(zhì)發(fā)生泄漏暴拄。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,934評(píng)論 3 313
  • 文/蒙蒙 一编饺、第九天 我趴在偏房一處隱蔽的房頂上張望乖篷。 院中可真熱鬧,春花似錦透且、人聲如沸撕蔼。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,755評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)罕邀。三九已至,卻和暖如春养距,著一層夾襖步出監(jiān)牢的瞬間诉探,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,987評(píng)論 1 266
  • 我被黑心中介騙來泰國(guó)打工棍厌, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留肾胯,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,358評(píng)論 2 360
  • 正文 我出身青樓耘纱,卻偏偏與公主長(zhǎng)得像敬肚,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子束析,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,514評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容

  • 【JS-8】 angular js自定義指令 directive 如何使用?為什么要使用封裝的自定義指令蝶锋? 小課堂...
    愛上Shu的小刺猬閱讀 1,880評(píng)論 0 3
  • 自定義指令簡(jiǎn)單介紹及使用 自定義指令無外乎增強(qiáng)了HTML,提供了額外的功能陆爽。 內(nèi)部指令基本能滿足我們的需求。 少數(shù)...
    念念不忘_必有回想閱讀 393評(píng)論 0 0
  • 下面來看一個(gè)非常簡(jiǎn)單的指令: 一般扳缕,比較少的指令慌闭,我們直接使用template是可以的别威,但是當(dāng)需要用到很多HTML...
    lMadman閱讀 251評(píng)論 0 0
  • 今從城西辦事歸來,趁著這難得的好天氣驴剔,決定徒步回城南省古,雖說路途還是有點(diǎn)遙遠(yuǎn),但是喜歡一個(gè)人行走仔拟,走走停蜕婪看路邊風(fēng)景...
    靜若繁花L閱讀 280評(píng)論 8 23
  • 很多人說,你在一件事上利花,投入超過一萬小時(shí)科侈,你就能在這件事上成功。對(duì)于寫字炒事,純粹是記錄自己的生活臀栈,抒發(fā)自己的想法,與...
    真愛521閱讀 282評(píng)論 0 0