理解angularjs之自定義指令

? ? ?理解angularjs之自定義指令盡管angularjs目前受關注程度遠遠低于Vuejs與reactjs,但對于從那個時代過來的前端來說,angular仍然是一個避不開的話題,況且以前大部分的項目都是采用angular進行開發。因此當你去了一家公司維護老項目以及升級版本的時候,就不得不去閱讀別人的代碼,你就很可能會接觸到angular的項目。所以,理解angular還是很有必要的。但是,angularjs對于初學者來說確實不大友好,繁瑣的語法,晦澀的自定義指令(即Vue中的組件)語法,往往給初學者帶來很大困擾。本文旨在用淺顯移動的話以及簡單的demo解釋angular的自定義指令,希望能給初學者一點小小的幫助。什么是自定義指令呢?隨著前端技術的快速發展,現在前端技術早已過了jQuery以及模塊化的時代,而進入了組件化、虛擬DOM的時代。angular中沒有組件的概念,跟組件類似的是以元素形式存在的自定義指令,本文所說的自定義指令專指組件,下文用組件指代自定義指令。關于angular的基礎知識本文不再涉及,如果你還不知道angular的基礎,請自行查閱相關文檔。封裝組件自然是為了代碼的復用,那么怎么封裝組件呢?

1、創建angular實例:var app = angular.module('myapp', []);

2、調用app掛載的directive方法,該方法接受兩個參數,第一個參數是組件名,第二個參數是匿名函數,該函數必須返回一個對象


? ? 這樣一個簡單的組件就封裝好了,你可以在頁面中使用例如在app的區域內使用,頁面就會顯示hello world。不過這個組件的功能很單一,而且模板內的數據都是死的,達不到我們對于組件的要求。下面我們慢慢完善.

給返回的對象添加配置項

replace: true,表示是否要將組件替換,瀏覽器并不認識未經解析的組件,我們設置為true;

transclude: true,處理指令里面的dom在哪里顯示,給模板的某個dom節點添加ng-transclude,就是把指令的innerHTML放到模板的那個節點上

link就相當于controller,給模板提供方法和屬性.

scope當前模板的作用域,element模板的最外層元素,attrs就是當前指令上所有的屬性


?現在我們的組件就成了這樣;


在頁面上使用:<hello>我將會顯示在具有ng-transclude屬性的標簽內</hello>,

?數據依舊是寫死了的,那么要怎么從外界傳遞數據進來呢?這到了angularjs最難以理解的部分了

配置scope: 這時我們的模板變為


scope:{book:'@booc',title:'=bookTitle',changeTitle:'&',color:'=colorTitle'}

?調用組件

<hello booc="boo" color-title="c" book-title="t"? change-title="sayName(name,money)">?

? ? ? ? ? ?{{content}}

</hello>

angularjs為我們想了一個辦法來傳遞數據——通過自定義屬性的形式,scope配置項中出現了三個特殊符號——@,=,&,為我們指定了屬性傳遞的格式。

@表示模板中的book變量的值通過外界的booc這個屬性傳遞進來并且傳遞的值只能是字符串,即本例中boo是字符串;

=表示模板中的title變量的值通過外界的bookTitle這個屬性傳值進來,并且傳遞的只能是變量,也就是說在本例中t是一個變量,注意scope中的駝峰形式的名稱在調用組件時必須寫成中劃線形式;

&表示從外界傳遞一個方法進來;本例模板中的changeTitle通過外界的change-title屬性傳遞進來,即外界的sayName方法最終賦給了changeTitle,注意模板中調用外界方法的時候,傳遞的參數只能是一個對象,外界函數在接收參數的時候,形參也必須跟該對象的屬性名相同

終于大功告成,一個功能相對完善的組件就封裝好了


?對于后續的完善與抽象,就需要根據實際工作的需要進行了,本文不再講述了

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,527評論 6 544
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,687評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,640評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,957評論 1 318
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,682評論 6 413
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 56,011評論 1 329
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 44,009評論 3 449
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,183評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,714評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,435評論 3 359
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,665評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,148評論 5 365
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,838評論 3 350
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,251評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,588評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,379評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,627評論 2 380

推薦閱讀更多精彩內容