Angular(二)

angular指令Directive

$sce控制代碼安全檢查

為什么要要$sce锦针?因?yàn)锳ngularJS里很多地方仁堪,比如路徑默認(rèn)是個(gè)字符串阶捆,不會(huì)認(rèn)為是路徑倦卖,從而訪問不到我們需要的東西,那么我們就可以通過$sce告訴angualr這個(gè)路徑蕉斜,這樣是很安全的逾柿。它有以下幾種方法:

$sce.trustAs(type,name);
$sce.trustAsUrl(value);
$sce.trustAsHtml(value);
$sce.trustAsResourceUrl(value);
$sce.trustAsJs(value);
  • ng-bind-html 這里只能放字符串類型的,需要將數(shù)據(jù)html編譯成$sce.trustAsHtml(html)

directive指令

directive(指令)是AngularJ非常強(qiáng)大功能之一。它就相當(dāng)于為我們寫了公共的自定義DOM元素或CLASS屬性或ATTR屬性宅此,并且還可以在它的基礎(chǔ)上來操作scope机错、綁定事件、更改樣式等父腕。通過這個(gè)Directive毡熏,我們可以封裝很多公共指令,比如分頁指令侣诵、自動(dòng)補(bǔ)全指令等等痢法。然后在HTML頁面里只需要簡(jiǎn)單的寫一行代碼就可以實(shí)現(xiàn)很多強(qiáng)大的功能。
指令分為兩類: 自帶指令 自定義指令
自定義指令:
裝飾型指令 賦予標(biāo)簽一些功能 link函數(shù)
組件式指令 把對(duì)應(yīng)標(biāo)簽 替換成一個(gè)組件 template

directive定義與用法
app.directive('panel',function () {
    return {
        restrict:'EA',   
        replace:false,
        template:`<div><div>Hello</div><div>zfpx</div></div>`,
        templateUrl:`tmpl/panel.html`,   
        link:function (scope,element,attrs) {//element即對(duì)應(yīng)的元素杜顺,attrs為該元素上的自定義屬性的集合
            //
            scope.name = attrs.st;
            scope.title = attrs.title;
        },
        scope:{}, 
        transclude:true
    }
});
directive指令詳解:
  • restrict:(字符串)限制使用范圍,取值有:E(元素),A(屬性),C(類),M(注釋)财搁,默認(rèn)范圍是'EA',范圍的標(biāo)識(shí)必須大寫
<my-drag></my-drag>         <!--Element E-->
<div my-drag></div>         <!--Attributes A-->
<div class="my-drag"></div> <!--Class C-->
<!-- directive:myDrag -->   <!--Comment M 前后必須用空格,不建議使用-->
  • replace:(布爾值)默認(rèn)值為false躬络,設(shè)置為true時(shí)候尖奔,將指令對(duì)應(yīng)的標(biāo)簽元素替換掉,要求模板只能有一個(gè)根節(jié)點(diǎn)
  • template:(字符串)穷当,一段HTML文本提茁,用于替換或添加對(duì)用元素的模板
  • templateUrl:(字符串),一個(gè)代表HTML文件路徑的字符串馁菜,通過ajax獲取過來的
  • scope:默認(rèn)值是false茴扁。

true表示繼承父作用域,并創(chuàng)建自己的作用域(子作用域)
{}表示創(chuàng)建一個(gè)全新的隔離作用域汪疮,不能繼承父級(jí)作用域

  • link:function link(scope, element, attrs, controller) { ... }

鏈接函數(shù)負(fù)責(zé)注冊(cè)DOM事件和更新DOM峭火。它是在模板被克隆之后執(zhí)行的,它也是大部分指令邏輯代碼編寫的地方智嚷。
scope - 指令需要監(jiān)聽的作用域,自己家沒有作用域 scope為根作用域卖丸,如果自己家有 scope就是自己家的作用域
element - instance element - 指令所在的元素。只有在postLink函數(shù)中對(duì)元素的子元素進(jìn)行操作才是安全的盏道,因?yàn)槟菚r(shí)它們才已經(jīng)全部鏈接好稍浆。
attrs - instance attributes - 實(shí)例屬性,一個(gè)標(biāo)準(zhǔn)化的猜嘱、所有聲明在當(dāng)前元素上的屬性列表衅枫,這些屬性在所有鏈接函數(shù)間是共享的。

controller - 控制器實(shí)例泉坐,也就是當(dāng)前指令通過require請(qǐng)求的指令direct2內(nèi)部的controller为鳄。比如:direct2指令中的controller:function(){this.addStrength = function(){}},那么腕让,在當(dāng)前指令的link函數(shù)中孤钦,你就可以通過controller.addStrength進(jìn)行調(diào)用了。

  • transclude:(布爾)

如果不想讓指令元素內(nèi)部的內(nèi)容被模板替換纯丸,可以設(shè)置這個(gè)值為true偏形。會(huì)產(chǎn)生一個(gè)作用域,一般情況下需要和ng-transclude指令一起使用觉鼻。 比如:template:"<div>hello every <div ng-transclude></div></div>"俊扭,這時(shí),指令元素內(nèi)部的內(nèi)容會(huì)嵌入到ng-transclude這個(gè)div中坠陈。也就是變成了<div>hello every <div>這是指令內(nèi)部的內(nèi)容</div></div>萨惑。默認(rèn)值為false捐康;這個(gè)配置選項(xiàng)可以讓我們提取包含在指令那個(gè)元素里面的內(nèi)容,再將它放置在指令模板的特定位置庸蔼。當(dāng)你開啟transclude后解总,你就可以使用ng-transclude來指明了應(yīng)該在什么地方放置transcluded內(nèi)容

  • controller
    可以是一個(gè)字符串或者函數(shù),若是為字符串,則將字符串當(dāng)做是控制器的名字姐仅,來查找注冊(cè)在應(yīng)用中的控制器的構(gòu)造函數(shù),可以注入一些特殊的服務(wù)(參數(shù)):

$scope花枫,與指令元素相關(guān)聯(lián)的作用域
$element,當(dāng)前指令對(duì)應(yīng)的 元素
$attrs掏膏,由當(dāng)前元素的屬性組成的對(duì)象
$transclude劳翰,嵌入鏈接函數(shù),實(shí)際被執(zhí)行用來克隆元素和操作DOM的函數(shù)

除非是用來定義一些可復(fù)用的行為馒疹,一般不推薦在這使用佳簸。指令的控制器和link函數(shù)可以進(jìn)行互換。區(qū)別在于行冰,控制器主要是用來提供可在指令間復(fù)用的行為但link鏈接函數(shù)只能在當(dāng)前內(nèi)部指令中定義行為溺蕉,且無法再指令間復(fù)用。

@悼做、=疯特、&局部 scope 屬性

scope值為{}時(shí)產(chǎn)生一個(gè)隔離作用域,隔離作用域可以通過綁定策略來訪問父作用域的屬性肛走,directive 在使用隔離 scope 的時(shí)候漓雅,提供了三種方法同隔離之外的地方交互

  • @:綁定到當(dāng)前元素的屬性值到scope作用域中。屬性值是一個(gè)字符串朽色。
  • =:綁定到當(dāng)前元素的屬性值到scope作用域中邻吞。屬性值是父作用域中的一個(gè)變量名。
  • &:提供一種方式在父作用域執(zhí)行一個(gè)表達(dá)式(函數(shù)等)葫男。如果沒有指定attr名稱抱冷,則屬性名稱為相同的本地名稱。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末梢褐,一起剝皮案震驚了整個(gè)濱河市旺遮,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌盈咳,老刑警劉巖耿眉,帶你破解...
    沈念sama閱讀 216,470評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異鱼响,居然都是意外死亡鸣剪,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,393評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來筐骇,“玉大人债鸡,你說我怎么就攤上這事∮倒樱” “怎么了娘锁?”我有些...
    開封第一講書人閱讀 162,577評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)饺鹃。 經(jīng)常有香客問我,道長(zhǎng)间雀,這世上最難降的妖魔是什么悔详? 我笑而不...
    開封第一講書人閱讀 58,176評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮惹挟,結(jié)果婚禮上茄螃,老公的妹妹穿的比我還像新娘。我一直安慰自己连锯,他們只是感情好归苍,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,189評(píng)論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著运怖,像睡著了一般拼弃。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上摇展,一...
    開封第一講書人閱讀 51,155評(píng)論 1 299
  • 那天吻氧,我揣著相機(jī)與錄音,去河邊找鬼咏连。 笑死盯孙,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的祟滴。 我是一名探鬼主播振惰,決...
    沈念sama閱讀 40,041評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼垄懂!你這毒婦竟也來了骑晶?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,903評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤埠偿,失蹤者是張志新(化名)和其女友劉穎透罢,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體冠蒋,經(jīng)...
    沈念sama閱讀 45,319評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡羽圃,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,539評(píng)論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片朽寞。...
    茶點(diǎn)故事閱讀 39,703評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡识窿,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出脑融,到底是詐尸還是另有隱情喻频,我是刑警寧澤,帶...
    沈念sama閱讀 35,417評(píng)論 5 343
  • 正文 年R本政府宣布肘迎,位于F島的核電站甥温,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏妓布。R本人自食惡果不足惜姻蚓,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,013評(píng)論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望匣沼。 院中可真熱鬧狰挡,春花似錦、人聲如沸释涛。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,664評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽唇撬。三九已至它匕,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間局荚,已是汗流浹背超凳。 一陣腳步聲響...
    開封第一講書人閱讀 32,818評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留耀态,地道東北人轮傍。 一個(gè)月前我還...
    沈念sama閱讀 47,711評(píng)論 2 368
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像首装,于是被迫代替她去往敵國(guó)和親创夜。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,601評(píng)論 2 353

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