指令的作用可以簡單的描述為實作語義化的标簽,比如你在移動端h5應用中,有個經常用的功能,比如通訊錄的功能,不同的頁面都要用到,這時你可以将其封裝為指令,在使用的時候可以通過這樣<friends></friends>的語義化的标簽直接在頁面中使用即可。
首先實作一個helloworld的例子,讓我們先上手自定義指令,先體會下指令的妙處。
定義指令helloword
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIiZpdmLlR2bjlHcvN2LcNXZnFWbp9CXt92YuM3ZvxmYuNmLu9Wbt92Yvw1LcpDc0RHaiojIsJye.gif)
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIiZpdmLlR2bjlHcvN2LcNXZnFWbp9CXt92YuM3ZvxmYuNmLu9Wbt92Yvw1LcpDc0RHaiojIsJye.gif)
使用指令
效果
生成的html
看到生成的标簽,你大概已經猜出template的作用了。
restrict: 說明指令在html中的渲染形式,選項有"a"、"e" 和 "c", "m" ,分别代表 attribute、element、class和comment(預設值為"a"),對應首字母記起來也很容易。
示例
a:<div helloworld></div>
c:<div class="helloworld"></div>
m:<!-- helloworld -->
transclude
指令的作用是把自定義的指令發标簽替換成浏覽器能夠認識的标簽,如果自定義的标簽内部出現了子标簽,那麼transclude就可以幫我進行處理了。
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIiZpdmLlR2bjlHcvN2LcNXZnFWbp9CXt92YuM3ZvxmYuNmLu9Wbt92Yvw1LcpDc0RHaiojIsJye.gif)
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIiZpdmLlR2bjlHcvN2LcNXZnFWbp9CXt92YuM3ZvxmYuNmLu9Wbt92Yvw1LcpDc0RHaiojIsJye.gif)
在html上使用
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIiZpdmLlR2bjlHcvN2LcNXZnFWbp9CXt92YuM3ZvxmYuNmLu9Wbt92Yvw1LcpDc0RHaiojIsJye.gif)
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIiZpdmLlR2bjlHcvN2LcNXZnFWbp9CXt92YuM3ZvxmYuNmLu9Wbt92Yvw1LcpDc0RHaiojIsJye.gif)
link
在指令中負責執行dom操作和注冊事件監聽器。
參數
scope:指令的scope的引用。scope變量在初始化時是不被定義的,link方法會注冊螢幕監視值變化事件。
element:包含指令的dom元素的引用,link方法一般通過jquery操作執行個體。
controller:在有嵌套指令的情況下使用。這個參數作用在把子指令的引用提供給父指令,允許指令之間進行互動。
scope
建立指令的作用範圍,scope在指令中作為屬性标簽傳遞。scope是建立可以複用指令的必備條件,每個指令(不論是處于嵌套指令的哪一級)都有其唯一的作用域,它不依賴于父scope。scope對象定義names和types變量。
“@”:(值傳遞,單向綁定),指令會檢索從父級scope中傳遞而來字元串中的值。指令可以使用該值但無法修改,是常用的變量。
“=”:(引用,雙向綁定),指令檢索scope中的引用取值。值可以是任意類型的,包括符合對象和數組。指令可以更改父級scope中的值,是以當指令需要修改父級scope中的值時我們就需要這種類型。
“&”:(表達式)在父級scope中起作用的表達式,它允許指令實作比修改值更進階的操作。
實作friends自定義指令
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIiZpdmLlR2bjlHcvN2LcNXZnFWbp9CXt92YuM3ZvxmYuNmLu9Wbt92Yvw1LcpDc0RHaiojIsJye.gif)
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIiZpdmLlR2bjlHcvN2LcNXZnFWbp9CXt92YuM3ZvxmYuNmLu9Wbt92Yvw1LcpDc0RHaiojIsJye.gif)
friends模闆
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIiZpdmLlR2bjlHcvN2LcNXZnFWbp9CXt92YuM3ZvxmYuNmLu9Wbt92Yvw1LcpDc0RHaiojIsJye.gif)
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIiZpdmLlR2bjlHcvN2LcNXZnFWbp9CXt92YuM3ZvxmYuNmLu9Wbt92Yvw1LcpDc0RHaiojIsJye.gif)
在路由#/home下使用指令friends
浏覽頁面
這裡為了友善直接将模闆存在一個html頁面裡面了,你也可以通過拼接字元串的形式将标簽寫在自定義指令裡面。
今天抽空将指令這塊補一下。
參考
<a href="http://www.cnblogs.com/powertoolsteam/p/angularjs-custom-directive.html" target="_blank">http://www.cnblogs.com/powertoolsteam/p/angularjs-custom-directive.html</a>
部落格位址:
<a href="http://www.cnblogs.com/wolf-sun">http://www.cnblogs.com/wolf-sun/</a>
部落格版權:
本文以學習、研究和分享為主,歡迎轉載,但必須在文章頁面明顯位置給出原文連接配接。
如果文中有不妥或者錯誤的地方還望高手的你指出,以免誤人子弟。如果覺得本文對你有所幫助不如【推薦】一下!如果你有更好的建議,不如留言一起讨論,共同進步!
再次感謝您耐心的讀完本篇文章。http://www.cnblogs.com/wolf-sun/p/5373762.html