1. 程式人生 > >AngularJS 指令實踐指南(一)

AngularJS 指令實踐指南(一)

指令(Directives)是所有AngularJS應用最重要的部分。儘管AngularJS已經提供了非常豐富的指令,但還是經常需要建立應用特定的指令。這篇教程會為你講述如何自定義指令,以及介紹如何在實際專案中使用。在這篇文章的最後(第二部分),我會指導你如何使用Angular指令來建立一個簡單的記事本應用。

概述

一個指令用來引入新的HTML語法。指令是DOM元素上的標記,使元素擁有特定的行為。舉例來說,靜態的HTML不知道如何來建立和展現一個日期選擇器控制元件。讓HTML能識別這個語法,我們需要使用指令。指令通過某種方法來建立一個能夠支援日期選擇的元素。我們會循序漸進地介紹這是如何實現的。 如果你寫過AngularJS的應用,那麼你一定已經使用過指令,不管你有沒有意識到。你肯定已經用過簡單的指令,比如 ng-mode, ng-repeat, ng-show等。這些指令都賦予DOM元素特定的行為。例如,ng-repeat 重複特定的元素,ng-show 有條件地顯示一個元素。如果你想讓一個元素支援拖拽,你也需要建立一個指令來實現它。指令背後基本的想法很簡單。它通過對元素繫結事件監聽或者改變DOM而使HTML擁有真實的互動性。

jQuery視角

想象一下使用jQuery如何建立一個日期選擇器。首先,我們在HTML中新增一個普通的輸入框,然後通過jQuery呼叫 $(element).dataPicker() 來將它轉變成一個日期選擇器。但是,仔細想一下。當一個設計人員過來檢查HTML標記的時候,他/她能否立刻猜到這個欄位實際上表示的內容?這只是一個簡單的輸入框,或者一個日期選擇器?你需要檢視jQuery程式碼來確定這些。而Angular的方法是使用一個指令來擴充套件HTML。所以,一個日期選擇器的指令可以是下面的形式: 

XHTML
1<input type
="text" />

或者是這樣:

XHTML
1 <input type="text" />

這種建立UI組建的方式更加直接和清晰。你可以輕易地通過檢視元素就明白這到底是什麼。

建立自定義指令:

一個Angular指令可以有以下的四種表現形式: 1. 一個新的HTML元素(<data-picker></data-picker>) 2. 元素的屬性(<input type=”text” data-picker/>) 3. CSS class(<input type=”text” class=”data-picker”/>) 4. 註釋(<!–directive:data-picker –>) 當然,我們可以控制我們的指令在HTML中的表現形式。下面我們來看一下AngularJS中的一個典型的指令的寫法。指令註冊的方式與 controller 一樣,但是它返回的是一個擁有指令配置屬性的簡單物件(指令定義物件) 。下面的程式碼是一個簡單的 Hello World 指令。

JavaScript
123456789varapp=angular.module('myapp',[]);app.directive('helloWorld',function(){return{restrict:'AE',replace:'true',template:'<h3>Hello World!!</h3>'};});

在上面的程式碼中,app.directive()方法在模組中註冊了一個新的指令。這個方法的第一個引數是這個指令的名字。第二個引數是一個返回指令定義物件的函式。如果你的指令依賴於其他的物件或者服務,比如 $rootScope, $http, 或者$compile,他們可以在這個時間被注入。這個指令在HTML中以一個元素使用,如下:

XHTML
1 2 3 <hello-world/> //OR <hello:world/>

或者,以一個屬性的方式使用:

XHTML
123<div hello-world></div>//OR<div hello:world/>

如果你想要符合HTML5的規範,你可以在元素前面新增 x- 或者 data-的字首。所以下面的標記也會匹配 helloWorld 指令:

1 2 3 &lt;div data-hello-world&gt;&lt;/div&gt; //OR &lt;divx-hello-world&gt;&lt;/div&gt;

注意: 在匹配指令的時候,Angular會在元素或者屬性的名字中剔除 x- 或者 data- 字首。 然後將 – 或者 : 連線的字串轉換成駝峰(camelCase)表現形式,然後再與註冊過的指令進行匹配。這是為什麼,我們在HTML中以 hello-world 的方式使用 helloWorld 指令。其實,這跟HTML對標籤和屬性不區分大小寫有關。 儘管上面的指令僅僅實現了靜態文字的顯示,但是這裡還是有一些有趣的點值得我們去挖掘。我們在指令定義過程中使用了三個屬性來配置指令。我們來一一介紹他們的作用。

  • restrict – 這個屬性用來指定指令在HTML中如何使用(還記得之前說的,指令的四種表示方式嗎)。在上面的例子中,我們使用了 ‘AE’。所以這個指令可以被當作新的HTML元素或者屬性來使用。如果要允許指令被當作class來使用,我們將 restrict 設定成 ‘AEC’。
  • template – 這個屬性規定了指令被Angular編譯和連結(link)後生成的HTML標記。這個屬性值不一定要是簡單的字串。template 可以非常複雜,而且經常包含其他的指令,以及表示式({{ }})等。更多的情況下你可能會見到 templateUrl, 而不是 template。所以,理想情況下,你應該將模板放到一個特定的HTML檔案中,然後將 templateUrl 屬性指向它。
  • replace – 這個屬性指明生成的HTML內容是否會替換掉定義此指令的HTML元素。在我們的例子中,我們用 <hello-world></hello-world>的方式使用我們的指令,並且將 replace 設定成 true。所以,在指令被編譯之後,生成的模板內容替換掉了 <hello-world></hello-world>。最終的輸出是 <h3>Hello World!!</h3>。如果你將 replace 設定成 false,也就是預設值,那麼生成的模板會被插入到定義指令的元素中。

開啟這個 plunker,在”Hello World!!”右鍵檢查元素內容,來更形象地明白這些。

Link函式和Scope

指令生成出的模板其實沒有太多意義,除非它在特定的scope下編譯。預設情況下,指令並不會建立新的子scope。更多的,它使用父scope。也就是說,如果指令存在於一個controller下,它就會使用這個controller的scope。 如何運用scope,我們要用到一個叫做 link 的函式。它由指令定義物件中的link屬性配置。讓我們來改變一下我們的 helloWorld 指令,當用戶在一個輸入框中輸入一種顏色的名稱時,Hello World 文字的背景色自動發生變化。同時,當用戶在 Hello World 文字上點選時,背景色變回白色。 相應的HTML標記如下:

XHTML

相關推薦

AngularJS 指令實踐指南

指令(Directives)是所有AngularJS應用最重要的部分。儘管AngularJS已經提供了非常豐富的指令,但還是經常需要建立應用特定的指令。這篇教程會為你講述如何自定義指令,以及介紹如何在實際專案中使用。在這篇文章的最後(第二部分),我會指導你如何使用An

AngularJS 指令實踐指南

這個系列教程的第一部分給出了AngularJS指令的基本概述,在文章的最後我們介紹瞭如何隔離一個指令的scope。第二部分將承接上一篇繼續介紹。首先,我們會看到在使用隔離scope的情況下,如何從指令內部訪問到父scope的屬性。接著,我們會基於對 controll

linux設備驅動模型之平臺總線實踐環節

linux設備驅動模型1、首先回顧下之前寫的驅動和數據在一起的led驅動代碼,代碼如下:#include <linux/module.h> #include <linux/init.h> #include <linux/leds.h> #include <asm/io

夏季學期軟工綜合實踐小記

服務 列表 加載 pat ons 編號 ins dal 顯示 本周是軟工方面夏季學期的第一周,前三天我們在東軟講師劉老師的帶領下完成了接下來的日子中需要的編程軟件MyEclipse和數據庫應用軟件Navicat for MySQL以及相關環境的配置安裝,並

MyEclipse WebSphere開發教程:WebSphere 7安裝指南

develop 技術分享 thum server file enter 操作系統 更多 launchpad 【周年慶】MyEclipse個人授權 折扣低至冰點!立即開搶>> 【MyEclipse最新版下載】 一、先決條件和系統信息 想要使用WebSphere

貓都能學會的Unity3D Shader入門指南

val int 系列 opengl 概念 想要 ble 結果 shade 動機 自己使用Unity3D也有一段時間了,但是很多時候是流於表面,更多地是把這個引擎簡單地用作腳本控制,而對更深入一些的層次幾乎沒有了解。雖然說Unity引擎設計的初衷就是創建簡單的不需要開發者操

Hyperledger Fabric CA User’s Guide——CA用戶指南

targe har 格式 rect ocs form per ces guid Fabric CA用戶指南 Hyperledger Fabric CA是一種用於Hyperledger Fabric的認證機構(CA)。 它提供了如下特性: 登記身份(註冊ID),或者連接到作

軟工實踐作業

隊友 希望 失望 遊戲 文檔 發展 創造力 pdf 是個 PDF 問題回答 一點感想 引用鏈接 問題回答 當初你是如何做出選擇計算機專業的決定的? 初高中都在做算法競賽,雖然最後沒走自主招生,但計算機依然是一個不錯的選擇。當初的想法就是:很有趣、很感興趣、我之前

.net core 實踐筆記--開篇

** 溫馨提示:如需轉載本文,請註明內容出處。** 本文連結:https://www.cnblogs.com/grom/p/9902000.html    最近無聊自己設計了一個小專案,基本都使用想用沒用或者沒深入的技術或語言,重在學習練手。 記錄過程以記錄踩過的坑和解決

python檔案讀寫指南

目錄   如何將列表資料寫入檔案? 如何從檔案中讀取內容? 多樣需求的讀寫任務 從with語句到上下文管理器 如何將列表資料寫入檔案? 首先,我們來看看下面這段程式碼,並思考:這段程式碼有沒有問題,如果有問題的話,要怎麼改? li = 

沃趣微講堂 | PXC、MGC&MGR原理與實踐對比

本期課程:PXC、MGC&MGR初相識 講師 | 羅小波·沃趣科技高階資料庫技術專家 出品 | 沃趣科技     七月份,波多老師線下作了一場題為“PXC、MGC&MGR原理與實踐對比”的精彩分享,整場下來,乾貨滿滿,現場的童鞋都聽得灰常

跨平臺機器學習實踐小結

一、問題來源: 如何在node web服務下呼叫sklearn的模型結果來進行實時模型預測? 二、問題分析: 1、sklearn的模型結果有幾種儲存方式: (1)pickle.dumps ,結果通過變數儲存在記憶體中 附上pickle文件:https://docs.pytho

SpringBoot踩坑指南:超連結--不能不經過請求直接跳轉到新的html及a標籤傳值

本篇博文轉自:https://blog.csdn.net/qq_36688143/article/details/79499959 html連結傳值及在新html取值和顯示上一步操作封裝的屬性資訊(顯示剛才建立的資料夾、發表的文章等)點選開啟連結  a標籤遍歷list傳值、傳請求:

Rancher及Docker快速上手指南

Rancher是一個開源的企業級全棧化容器部署及管理平臺,目前我們使用的是穩定釋出的版本V1.6(2017年釋出),其中Rancher2.0也於2018年釋出,Rancher 2.0是一個簡化、加速企業Kubernetes(K8S)快速落地的產品,由於2.0版本變動太大,不便於我們入門應用,而且

《推薦系統實踐——推薦系統評測

一、預測準確度 <1>、評分預測 1.均方根誤差(RMSE) (1)均方根(RMS)也稱為效值,公式:Xrms=∑i=1NXi2NX_{rms}=\frac{\sqrt{\sum_{i=1}^NX_i^2}}{N}Xrms​=N∑i=1N​Xi2​​

動態桌布開發指南概述介紹

一、概述 1.1 簡介 在Android中,桌布分為靜態與動態兩種。靜態桌布是一張圖片,而動態桌布則以動畫為表現形式,或者可以對使用者的操作作出反應。動態桌布實際上和其他應用是類似的,自Android 2.1開始支援。Android桌布執行在一個Android服

springboot2.0入坑指南

     跟隨專案,長期記錄自己的踩坑經歷。。 一、springboot介紹        呃,,首先簡單介紹 一下springboot,一個微服務框架,能夠快速整合第三方框架(傳統的ssm、ssh等等),完全採用註解化,簡化配置,內建嵌入Http伺服器。傳統框架(如SS

Axon框架使用指南:簡介

 隨著時間的推移,對軟體專案的需求迅速增加。公司希望他們的(網路)應用程式與他們的業務一起發展。這意味著不僅專案和程式碼庫變得更加複雜,而且意味著不斷新增,更改和功能被刪除。發現一個看起來很容易實現的功能可能要求開發團隊拆分整個應用程式可能令人沮喪。此外,今天的Web應用

Innodb實踐總結

本文來自網易雲社群。在聽心潔同學分享了三次關於innodb的加鎖機制實踐之後,終於自己也去實踐了一下,雖然只是單例的mysql,與平臺的ddb相比小巫見大巫,在整理心潔分享的過程中,在實踐與查資料的過程中確實收穫了不少,與大家一起分享一下。1. MySQL鎖概述相對其他資料庫

Maven入門指南

原文連結  譯文連結  譯者:nkcoder  校對:方騰飛 Maven介紹: Maven是一個強大的Java專案構建工具。當然,你也可以使用其它工具來構建專案,但由於Maven是用Java開發的,因此Maven被更多的用於Java專案中。 這篇教程的目的是幫助你理解Maven的工作機制。因此