使用 AngularJS 指令增強(qiáng) HTML

使用 AngularJS 指令增強(qiáng) HTML

AngularJS 的主要特點(diǎn)是它允許我們擴(kuò)展 HTML 的功能來服務(wù)于當(dāng)今動(dòng)態(tài)網(wǎng)頁(yè)的目的。在本文中,我將向您展示如何使用 AngularJS 的指令來使您的開發(fā)更快、更輕松,并且使您的代碼更易于維護(hù)。

準(zhǔn)備

第 1 步:HTML 模板

為了讓事情變得更簡(jiǎn)單,我們將把所有代碼編寫在一個(gè) HTML 文件中。創(chuàng)建它并將基本的 HTML 模板放入其中:

       

現(xiàn)在將來自 Google CDN 的 angular.min.js 文件添加到文檔的

中:

 <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.16/angular.min.js"></script>

第 2 步:創(chuàng)建模塊

現(xiàn)在讓我們?yōu)橹噶顒?chuàng)建模塊。我將其稱為 example,但您可以選擇任何您想要的名稱,只需記住我們將使用此名稱作為稍后創(chuàng)建的指令的命名空間。

立即學(xué)習(xí)前端免費(fèi)學(xué)習(xí)筆記(深入)”;

將此代碼放在

底部的腳本標(biāo)記中:

var module = angular.module('example', []); 

我們沒有任何依賴項(xiàng),因此 angular.module() 的第二個(gè)參數(shù)中的數(shù)組為空,但不要完全刪除它,否則您將得到 $injector:nomod錯(cuò)誤,因?yàn)?angular.module() 的單參數(shù)形式檢索對(duì)已存在模塊的引用,而不是創(chuàng)建新模塊。

您還必須將 ng-app=”example” 屬性添加到

標(biāo)記才能使應(yīng)用程序正常工作。之后文件應(yīng)如下所示:

               <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.16/angular.min.js"></script><script> var module = angular.module('example', []); </script>

屬性指令:1337 C0NV3R73R

首先,我們將創(chuàng)建一個(gè)簡(jiǎn)單的指令,其工作方式與 ngBind 類似,但它將把文本更改為 leet talk。

第 1 步:指令聲明

使用 module.directive() 方法聲明指令:

module.directive('exampleBindLeet', function () { 

第一個(gè)參數(shù)是指令的名稱。它必須采用駝峰式命名法,但由于 HTML 不區(qū)分大小寫,因此您將在 HTML 代碼中使用破折號(hào)分隔的小寫形式 (example-bind-leet)。

作為第二個(gè)參數(shù)傳遞的函數(shù)必須返回一個(gè)描述該指令的對(duì)象。目前它只有一個(gè)屬性:鏈接函數(shù):

    return { 		link: link 	}; }); 

第2步:鏈接函數(shù)

您可以在 return 語(yǔ)句之前定義函數(shù),也可以直接在返回的對(duì)象中定義該函數(shù)。它用于操作我們的指令所應(yīng)用的元素的 DOM,并使用三個(gè)參數(shù)進(jìn)行調(diào)用:

function link($scope, $elem, attrs) { 

$scope 是一個(gè) Angular 范圍對(duì)象,$elem 是該指令匹配的 DOM 元素(它包裝在 jqLit??e 中,jqLit??e 是 AngularJS 的 jQuery 最常用函數(shù)的子集) attrs 是一個(gè)具有所有元素屬性的對(duì)象(具有規(guī)范化名稱,因此 example-bind-leet 將可用作 attrs.exampleBindLeet)。

我們的指令中此函數(shù)的最簡(jiǎn)單的代碼如下所示:

    var leetText = attrs.exampleBindLeet.replace(/[abegilostz]/gmi, function (letter) { 	    return leet[letter.toLowerCase()];     });  	$elem.text(leetText); } 

首先,我們將 example-bind-leet 屬性中提供的文本中的一些字母替換為 leet 表中的替換內(nèi)容。該表如下所示:

var leet = {     a: '4', b: '8', e: '3', 	g: '6', i: '!', l: '1', 	o: '0', s: '5', t: '7', 	z: '2' }; 

您應(yīng)該將其放在 <script> 標(biāo)記的頂部。正如您所看到的,這是最基本的 leet 轉(zhuǎn)換器,因?yàn)樗鼉H替換十個(gè)字符。</script>

之后,我們將字符串轉(zhuǎn)換為 leet say,我們使用 jqLit??e 的 text() 方法將其放入該指令匹配的元素的內(nèi)部文本中。

現(xiàn)在您可以通過將此 HTML 代碼放入文檔的

中來測(cè)試它:

<div example-bind-leet="This text will be converted to leet speak!"></div> 

輸出應(yīng)如下所示:

但這并不完全是 ngBind 指令的工作原理。我們將在接下來的步驟中改變這一點(diǎn)。

第 3 步:范圍

首先,example-bind-leet 屬性中傳遞的應(yīng)該是對(duì)當(dāng)前作用域中變量的引用,而不是我們要轉(zhuǎn)換的文本。為此,我們必須為指令創(chuàng)建一個(gè)隔離的范圍。

我們可以通過將作用域?qū)ο筇砑拥街噶詈瘮?shù)的返回值來實(shí)現(xiàn)這一點(diǎn):

module.directive('exampleBindLeet', function () {     ... 	return { 		link: link, 		scope: {  		} 	}; ); 

該對(duì)象中的每個(gè)屬性都將在指令的范圍內(nèi)可用。它的值將由這里的值決定。如果我們使用“-”,則該值將等于與屬性同名的屬性的值。使用“=”將告訴編譯器我們期望傳遞當(dāng)前作用域中的變量 – 這將像 ngBind:

一樣工作

scope: { 	exampleBindLeet: '=' } 

您還可以使用任何內(nèi)容作為屬性名稱,并將規(guī)范化(轉(zhuǎn)換為駝峰命名法)的屬性名稱放在 – 或 = 后面:

scope: { 	text: '=exampleBindLeet' } 

選擇最適合您的。現(xiàn)在我們還必須更改鏈接函數(shù)以使用 $scope 而不是 attr:

function link($scope, $elem, attrs) {     var leetText = $scope.exampleBindLeet.replace(/[abegilostz]/gmi, function (letter) { 		return leet[letter.toLowerCase()]; 	});  	$elem.text(leetText); } 

現(xiàn)在使用 ngInit 或創(chuàng)建一個(gè)控制器,并將 div 的 example-bind-leet 屬性的值更改為您使用的變量的名稱:

       <div example-bind-leet="textToConvert"></div>    

第 4 步:檢測(cè)更改

但這仍然不是 ngBind 的工作原理。要查看我們添加一個(gè)輸入字段以在頁(yè)面加載后更改 textToConvert 的值:

<input ng-model="textToConvert">

現(xiàn)在,如果您打開頁(yè)面并嘗試更改輸入中的文本,您將看到我們的 div 中沒有任何變化。這是因?yàn)?link() 函數(shù)在編譯時(shí)每個(gè)指令都會(huì)調(diào)用一次,因此它無(wú)法在每次范圍內(nèi)發(fā)生更改時(shí)更改元素的內(nèi)容。

要改變這一點(diǎn),我們將使用 $scope.$watch() 方法。它接受兩個(gè)參數(shù):第一個(gè)是 Angular 表達(dá)式,每次修改范圍時(shí)都會(huì)對(duì)其進(jìn)行求值,第二個(gè)是回調(diào)函數(shù),當(dāng)表達(dá)式的值發(fā)生更改時(shí)將被調(diào)用。

首先,讓我們將 link() 函數(shù)中的代碼放入其中的本地函數(shù)中:

function link($scope, $elem, attrs) {     function convertText() { 		var leetText = $scope.exampleBindLeet.replace(/[abegilostz]/gmi, function (letter) { 			return leet[letter.toLowerCase()]; 		});  		$elem.text(leetText); 	} } 

現(xiàn)在,在該函數(shù)之后,我們將調(diào)用 $scope.$watch(),如下所示:

$scope.$watch('exampleBindLeet', convertLeet); 

如果您現(xiàn)在打開頁(yè)面并更改輸入字段中的某些內(nèi)容,您將看到 div 的內(nèi)容也按預(yù)期發(fā)生了變化。

元素指令:進(jìn)度條

現(xiàn)在我們將編寫一個(gè)指令來為我們創(chuàng)建一個(gè)進(jìn)度條。為此,我們將使用一個(gè)新元素:

第 1 步:樣式

為了讓我們的進(jìn)度條看起來像一個(gè)進(jìn)度條,我們必須使用一些 CSS。將此代碼放入文檔的

中的

使用 AngularJS 指令增強(qiáng) HTML

HTML速學(xué)教程(入門課程)

HTML怎么學(xué)習(xí)?HTML怎么入門?HTML在哪學(xué)?HTML怎么學(xué)才快?不用擔(dān)心,這里為大家提供了HTML速學(xué)教程(入門課程),有需要的小伙伴保存下載就能學(xué)習(xí)啦!

下載

來源:php中文網(wǎng)

使用 AngularJS 指令增強(qiáng) HTML

本文內(nèi)容由網(wǎng)友自發(fā)貢獻(xiàn),版權(quán)歸原作者所有,本站不承擔(dān)相應(yīng)法律責(zé)任。如您發(fā)現(xiàn)有涉嫌抄襲侵權(quán)的內(nèi)容,請(qǐng)聯(lián)系admin@php.cn

最新問題

使用 AngularJS 指令增強(qiáng) HTML廣告

熱門教程

更多>

最新下載

更多>

網(wǎng)站特效

網(wǎng)站素材

前端模板

關(guān)于我們 免責(zé)申明 意見反饋 講師合作 廣告合作 最新更新

php中文網(wǎng):公益在線php培訓(xùn),幫助PHP學(xué)習(xí)者快速成長(zhǎng)!
關(guān)注服務(wù)號(hào)

技術(shù)交流群

使用 AngularJS 指令增強(qiáng) HTML

PHP中文網(wǎng)訂閱號(hào)
每天精選資源文章推送
使用 AngularJS 指令增強(qiáng) HTML

PHP中文網(wǎng)APP
隨時(shí)隨地碎片化學(xué)習(xí)
使用 AngularJS 指令增強(qiáng) HTML

PHP中文網(wǎng)抖音號(hào)
發(fā)現(xiàn)有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP備2023035733號(hào)

  • PHP學(xué)習(xí)

  • 技術(shù)支持

  • 返回頂部

  • ? 版權(quán)聲明
    THE END
    模板教程
    # 網(wǎng)站源碼
    喜歡就支持一下吧
    點(diǎn)贊8 分享
    相關(guān)推薦