自定義指令directive

angular.module('myApp', []).
directive('myDirective', function () { 
    return { 
        restrict: String, 
        priority: Number, 
        terminal: Boolean, 
        template: String or Template Function: function (tElement, tAttrs) (...}, 
        templateUrl: String, 
        replace: Boolean or String, 
        scope: Boolean or Object, 
        transclude: Boolean, 
        controller: String or function(scope, element, attrs, transclude, otherInjectables) { ... }, 
        controllerAs: String, 
        require: String, 
        link: function (scope, iElement, iAttrs) { ... }, 
        compile: // 返回一個(gè)對(duì)象或連接函數(shù)兄纺,如下所示:            
            function(tElement, tAttrs, transclude) {                 
                return {                     
                    pre: function(scope, iElement, iAttrs, controller) { ... },                     
                    post: function(scope, iElement, iAttrs, controller) { ... }                 
                }                 
                // 或者                 
                return function postLink(...) { ... }    
        }     
    }; 
});

1. scope

scope的三種取值

  1. false(默認(rèn)值):直接使用父scope。
  2. true:繼承父scope娱挨,子作用域scope的proto指向了父作用域scope
  3. 對(duì)象{ }:創(chuàng)建一個(gè)新的“隔離”scope删壮,但仍可與父scope通信
    隔離的scope撞芍,通常用于創(chuàng)建可復(fù)用的指令方庭,也就是它不用管父scope中的model。然而雖然說是“隔離”有咨,但通常我們還是需要讓這個(gè)子scope跟父scope中的變量進(jìn)行綁定琐簇。綁定的策略有3種:@:單向綁定,外部scope能夠影響內(nèi)部scope座享,但反過來不成立=:雙向綁定婉商,外部scope和內(nèi)部scope的model能夠相互改變&:把內(nèi)部scope的函數(shù)的返回值和外部scope的任何屬性綁定起來
  1. false(默認(rèn)值):直接使用父scope。
    比較“危險(xiǎn)”征讲【菽常可以理解成指令內(nèi)部并沒有一個(gè)新的scope,它和指令以外的代碼共享同一個(gè)scope诗箍。我們創(chuàng)建的指令繼承了父作用域的一切屬性和方法癣籽,這也使得在指令的模板中我們可以使用這些屬性和方法挽唉。
    因?yàn)槲覀儗cope的屬性設(shè)置為false所以,我們創(chuàng)建的指令繼承了父作用域的一切屬性和方法筷狼,這也使得在指令的模板中我們可以使用這些屬性和方法瓶籽。

  2. true:從父作用域繼承并創(chuàng)建一個(gè)新的作用域?qū)ο蟆?br> 子作用域scope的_proto_指向了父作用域scope
    內(nèi)置指令ng-controller的作用,就是從父級(jí)作用域繼承并創(chuàng)建一個(gè)新的子作用域埂材。它會(huì)創(chuàng) 建一個(gè)新的從父作用域繼承而來的子作用域塑顺。

  3. { }:創(chuàng)建一個(gè)新的“隔離”scope,當(dāng)我們將scope的屬性設(shè)置為{}時(shí)俏险,我們可以做更多的事情严拒。
    AngularJS最強(qiáng)的大的地方之一就是它可以構(gòu)建組件,無論放在哪里都是可以使用的竖独;這所以可以做到這些裤唠,不得不歸功于指令的這個(gè)屬性;當(dāng)我們將scope設(shè)置為{}時(shí)莹痢,意味著我們創(chuàng)建的一個(gè)新的與父作用域隔離的新的作用域种蘸,這使我們?cè)诓恢劳獠凯h(huán)境的情況下,就可以正常工作竞膳,不依賴外部環(huán)境航瞭。所以隔離的scope,通常用于創(chuàng)建可復(fù)用的指令坦辟,也就是它不用管父scope中的model刊侯。
    我們使用了隔離的作用域,不代表我們不可以使用父作用域的屬性和方法长窄。我們可以通過向scope的{}中傳入特殊的前綴標(biāo)識(shí)符(即prefix)滔吠,來進(jìn)行數(shù)據(jù)的綁定。在創(chuàng)建了隔離的作用域挠日,我們可以通過@,&,=引用應(yīng)用指令的元素的屬性。
    綁定的策略有3種:@翰舌、=嚣潜、&
    1、@ 單項(xiàng)綁定的前綴標(biāo)識(shí)符使用方法:在元素中使用屬性椅贱,好比這樣my-directive my-name="{{name}}">
    注意懂算,屬性的名字要用-將兩個(gè)單詞連接,因?yàn)槭菙?shù)據(jù)的單項(xiàng)綁定所以要通過使用{{}}來綁定數(shù)據(jù)庇麦。
    注意计技,父作用域中修改綁定值會(huì)影響子作用域,但子作用域修改綁定的值不影響父作用域山橄。
    2垮媒、= 雙向數(shù)據(jù)綁定前綴標(biāo)識(shí)符使用方法:在元素中使用屬性,好比這樣my-directive age="age">
    注意,數(shù)據(jù)的雙向綁定要通過=前綴標(biāo)識(shí)符實(shí)現(xiàn)睡雇,所以不可以使用{{}}萌衬。
    3、& 綁定函數(shù)方法的前綴標(biāo)識(shí)符使用方法:在元素中使用屬性它抱,好比這樣my-directive change-my-age="changeAge()">秕豫,
    注意,屬性的名字要用-將多個(gè)個(gè)單詞連接观蓄。注意:在新創(chuàng)建指令的作用域?qū)ο笾谢煲疲褂脤傩缘拿诌M(jìn)行綁定時(shí),要使用駝峰命名標(biāo)準(zhǔn)侮穿,比如下面的代碼沫屡。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市撮珠,隨后出現(xiàn)的幾起案子沮脖,更是在濱河造成了極大的恐慌,老刑警劉巖芯急,帶你破解...
    沈念sama閱讀 217,509評(píng)論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件勺届,死亡現(xiàn)場離奇詭異,居然都是意外死亡娶耍,警方通過查閱死者的電腦和手機(jī)免姿,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,806評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來榕酒,“玉大人胚膊,你說我怎么就攤上這事∠胗ィ” “怎么了紊婉?”我有些...
    開封第一講書人閱讀 163,875評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長辑舷。 經(jīng)常有香客問我喻犁,道長,這世上最難降的妖魔是什么何缓? 我笑而不...
    開封第一講書人閱讀 58,441評(píng)論 1 293
  • 正文 為了忘掉前任肢础,我火速辦了婚禮,結(jié)果婚禮上碌廓,老公的妹妹穿的比我還像新娘传轰。我一直安慰自己,他們只是感情好谷婆,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,488評(píng)論 6 392
  • 文/花漫 我一把揭開白布慨蛙。 她就那樣靜靜地躺著辽聊,像睡著了一般。 火紅的嫁衣襯著肌膚如雪股淡。 梳的紋絲不亂的頭發(fā)上身隐,一...
    開封第一講書人閱讀 51,365評(píng)論 1 302
  • 那天,我揣著相機(jī)與錄音唯灵,去河邊找鬼贾铝。 笑死,一個(gè)胖子當(dāng)著我的面吹牛埠帕,可吹牛的內(nèi)容都是我干的垢揩。 我是一名探鬼主播,決...
    沈念sama閱讀 40,190評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼敛瓷,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼叁巨!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起呐籽,我...
    開封第一講書人閱讀 39,062評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤锋勺,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后狡蝶,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體庶橱,經(jīng)...
    沈念sama閱讀 45,500評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,706評(píng)論 3 335
  • 正文 我和宋清朗相戀三年贪惹,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了苏章。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,834評(píng)論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡奏瞬,死狀恐怖枫绅,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情硼端,我是刑警寧澤并淋,帶...
    沈念sama閱讀 35,559評(píng)論 5 345
  • 正文 年R本政府宣布,位于F島的核電站显蝌,受9級(jí)特大地震影響预伺,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜曼尊,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,167評(píng)論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望脏嚷。 院中可真熱鬧骆撇,春花似錦、人聲如沸父叙。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,779評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至涌乳,卻和暖如春蜻懦,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背夕晓。 一陣腳步聲響...
    開封第一講書人閱讀 32,912評(píng)論 1 269
  • 我被黑心中介騙來泰國打工宛乃, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人蒸辆。 一個(gè)月前我還...
    沈念sama閱讀 47,958評(píng)論 2 370
  • 正文 我出身青樓征炼,卻偏偏與公主長得像,于是被迫代替她去往敵國和親躬贡。 傳聞我的和親對(duì)象是個(gè)殘疾皇子谆奥,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,779評(píng)論 2 354

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