摘要:屬性為時(shí),指示優(yōu)先級(jí)小于當(dāng)前指令的指令都不執(zhí)行,僅執(zhí)行到本指令。
作者:心葉
時(shí)間:2018-04-22 10:58
下面是大致的說明,不是全面的,后面來具體說明一些沒有提及的細(xì)節(jié)和重要的相關(guān)知識(shí):
angular.module("yelloxingApp", []).directive("uiDirective", function() { return { restrict:String,//標(biāo)明該指令可以在模板中用于元素E、屬性A、類C和注釋M或組合 priority:Number,//設(shè)置指令執(zhí)行優(yōu)先級(jí),在某個(gè)DOM上優(yōu)先級(jí)高的會(huì)先執(zhí)行 terminal:Boolean, template:String or Template Function,//就是設(shè)置模板,和下面的templateUrl屬性二個(gè)只可以設(shè)置一個(gè),目的一樣 templateUrl:String or Template Function,//除了字符串,這二個(gè)屬性還可以設(shè)置函數(shù) replace:Boolean,//指令模板是否替換原來的元素 scope:Boolean or Object, controller:String or function(scope, element, attrs) { ... }, require:String or Array, //你需要知道link在每個(gè)實(shí)例都執(zhí)行一遍,compile全程只會(huì)執(zhí)行一遍 link: function(scope, element, attrs,ctrl) { ... }, compile:function(element, attrs) { //常用的就是compile的此處寫執(zhí)行一次的代碼,或者在link方法里面寫和dom有關(guān)的操作 } }; });二:一些屬性說明
【scope】
可以設(shè)置boolean或者對(duì)象,先來說說boolean,這個(gè)比較簡單:
1.當(dāng)設(shè)置true的時(shí)候,表示繼承父scope,是一個(gè)子scope;
2.當(dāng)設(shè)置false的時(shí)候,直接使用父scope。
還有一種對(duì)象設(shè)置方法,就是設(shè)置一種隔離的scope,在使用隔離scope的時(shí)候,提供了三種方法同隔離之外的地方交互,下面用一個(gè)例子來一一說明:
angular.module("yelloxingApp", []).directive("scopeExample", ["$rootScope", function($rootScope) { return { restrict: "A", scope: { _userDataName: "=userDataName", _onSend: "&onSend", _fromName: "@fromName" }, template: `
上面是指令的寫法,下面來看看控制器里面有什么:
$scope.name = "心葉"; $scope.user = "yelloxing"; $scope.sendMail = function(email){ console.error(email); }
最后別忘了html里面的使用:
【require】
請(qǐng)求另外的controller,然后作為link方法的第四個(gè)參數(shù)傳遞進(jìn)去,我們需要注意的是查找控制器的方法。
查找控制器的方法可以這樣理解:使用?表示如果在當(dāng)前指令中沒有找到所需要的控制器,會(huì)將null作為傳給link函數(shù)的第四個(gè)參數(shù),如果添加了^前綴,指令會(huì)在上游的指令鏈中查找require參數(shù)所指定的控制器,他們也可以組合,比如require: "?^ngModel",如果沒有前綴,指令將會(huì)在自身所提供的控制器中進(jìn)行查找,如果沒有找到任何控制器(或具有指定名字的指令)就拋出一個(gè)錯(cuò)誤。
【terminal】
屬性terminal:為true時(shí),指示優(yōu)先級(jí)小于當(dāng)前指令的指令都不執(zhí)行,僅執(zhí)行到本指令。
三:視圖和model之間的數(shù)據(jù)格式化類似過濾器的功能,有時(shí)候我們希望頁面顯示的是數(shù)據(jù)經(jīng)過某種翻譯后的樣子,以便于約定,不過對(duì)于數(shù)據(jù)庫也許簡單的序號(hào)會(huì)更有益,因此你可能會(huì)需要在link中使用下面的方法來實(shí)現(xiàn)這個(gè)功能:
1.ctrl.$formatters.unshift(function(input) {//model到view的數(shù)據(jù)格式化});
2.ctrl.$parsers.unshift(function(input) {//view到model的數(shù)據(jù)格式化})。
上面的$formatters和$parsers就是二個(gè)隊(duì)列,視圖到model和model到視圖,會(huì)方便經(jīng)過里面定義的方法的過濾,有點(diǎn)類似管道流,最后流到目的地。
別忘了設(shè)置類似require: "?ngModel"這樣的語句去查找控制器。
四:視圖和model數(shù)據(jù)同步問題有時(shí)候在指令里面通過jquery修改了input的數(shù)據(jù),不過angularjs并不會(huì)知道,這時(shí)候,你可以選擇下面中的一個(gè)方法:
1.觸發(fā)輸入框change改變,讓Angularjs發(fā)現(xiàn)數(shù)據(jù)改變了,從而去調(diào)用$setViewValue(value),同步數(shù)據(jù):$("input").trigger("change");
2.直接手動(dòng)觸發(fā)同步value到viewValue和modelValue中的行為:ctrl.$setViewValue($scope.info)。
五:幾個(gè)零碎的技巧1.根據(jù)輸入框是否合法來設(shè)置true或false:ctrl.$setValidity(errorType, boolean);//errorType表示錯(cuò)誤類別,可以自定義
2.設(shè)置監(jiān)聽指定的一個(gè)model值,當(dāng)然還有監(jiān)聽集合等方法:$scope.$watch(attrs["ngModel"], function(newValue, oldValue) {});
3.有時(shí)候在指令里面新添加的字符串需要被angularjs管理,就可以用下面的方法編譯一下:$compile(newHtml)($scope)。
六:常用方法或服務(wù)解析一段字符串(可能是屬性也可能是方法)的方法有二個(gè),直接看下面例子:
$scope.getInfo=function(){ console.log("這是執(zhí)行了函數(shù)的表現(xiàn)"); }; var funName="getInfo()"; //執(zhí)行方法一: $scope.$eval(funName); //執(zhí)行方法二: $parse(funName)($scope);
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/94489.html
摘要:編寫工作首先介紹了一個(gè)稱為的內(nèi)部組件表示,并解釋了變更檢測過程在視圖上運(yùn)行。本文主要由兩部分組成第一部分探討錯(cuò)誤產(chǎn)生的原因,第二部分提出可能的修正。它對(duì)我意義重大,它能幫助其他人看到這篇文章。 在過去的8個(gè)月里,我大部分空閑時(shí)間都是reverse-engineering Angular。我最感興趣的話題是變化檢測。我認(rèn)為它是框架中最重要的部分,因?yàn)樗?fù)責(zé)像DOM更新、輸入綁定和查詢列表...
摘要:模塊和依賴注入細(xì)心的讀者可能已經(jīng)發(fā)現(xiàn)了,到目前為止所用到的例子都是使用的全局的構(gòu)造函數(shù)來定義控制器的。這非常的簡單,只需使用如下參數(shù)來調(diào)用即可控制器的名字字符串類型控制器的構(gòu)造函數(shù)全局定義的控制器構(gòu)造函數(shù)只適用于快速示例和原型開發(fā)。 上一篇:【譯】《精通使用AngularJS開發(fā)Web App》(三) 下一篇: 書名:Mastering Web Application Develop...
摘要:可選參數(shù),布爾值或者對(duì)象默認(rèn)值為,可能取值默認(rèn)值。布爾值或者字符,默認(rèn)值為這個(gè)配置選項(xiàng)可以讓我們提取包含在指令那個(gè)元素里面的內(nèi)容,再將它放置在指令模板的特定位置。 前言 最近學(xué)習(xí)了下angularjs指令的相關(guān)知識(shí),也參考了前人的一些文章,在此總結(jié)下。 歡迎批評(píng)指出錯(cuò)誤的地方。 Angularjs指令定義的API showImg(https://segmentfault.com/img...
摘要:融合思路解決這個(gè)問題,有兩種思路。給我們帶來了以下新成員模塊服務(wù)指令篩選器和控制器。與其他類是通過類的名稱區(qū)分的,名稱統(tǒng)一以結(jié)尾。這種處理方式是一種折中方案,如果想要更加規(guī)范優(yōu)雅的話,建議使用自定義標(biāo)簽來解決。 字?jǐn)?shù):1568 閱讀時(shí)間:10分鐘 前言 ??前面,我們以一個(gè)實(shí)戰(zhàn)案例來詳細(xì)說明了如何在實(shí)際開發(fā)中使用JSDuck工具。但是,并不是所有的時(shí)候,代碼的封裝方式都受我們控制的。...
摘要:使用開發(fā),很重要的一步是需要開發(fā)自定義的指令。接下來分幾個(gè)步驟記錄如何開發(fā)一個(gè)自定義的指令。對(duì)這個(gè)元素及其子元素進(jìn)行變形之類的操作是安全的。鏈接函數(shù)鏈接函數(shù)負(fù)責(zé)注冊事件和更新。說明和是指令的關(guān)鍵部分,留在下一章中詳細(xì)討論。 使用Angularjs開發(fā),很重要的一步是需要開發(fā)自定義的指令(custom directives)。接下來分幾個(gè)步驟記錄如何開發(fā)一個(gè)自定義的指令。 目錄: 指令...
閱讀 1822·2021-09-22 15:54
閱讀 2935·2021-09-01 10:42
閱讀 3448·2019-08-30 15:56
閱讀 1442·2019-08-29 18:46
閱讀 2473·2019-08-29 10:57
閱讀 2714·2019-08-28 17:57
閱讀 3667·2019-08-23 18:14
閱讀 839·2019-08-23 17:03