本篇文章主要的向大家解釋了什麼是angularjs自訂的指令中有價值的細節和技巧,這些你都知道嗎?不知道的話還不過來看看這些。我們一起來看這篇文章吧
一:自訂指令常用範本
下面是大致的說明,不是全面的,後面來具體說明一些沒有提及的細節與重要的相關知識:
angular.module('yelloxingApp', []).directive('uiDirective', function() { return { restrict:String,//标明该指令可以在模板中用于元素E、属性A、类C和注释M或组合 priority:Number,//设置指令执行优先级,在某个DOM上优先级高的会先执行 terminal:Boolean, template:String or Template Function,//就是设置模板,和下面的templateUrl属性二个只可以设置一个,目的一样 templateUrl:String or Template Function,//除了字符串,这二个属性还可以设置函数 replace:Boolean,//指令模板是否替换原来的元素 scope:Boolean or Object, controller:String or function(scope, element, attrs) { ... }, require:String or Array //你需要知道link在每个实例都执行一遍,compile全程只会执行一遍 link: function(scope, element, attrs,ctrl) { ... }, compile:function(element, attrs) { //常用的就是compile的此处写执行一次的代码,或者在link方法里面写和dom有关的操作 } }; });
二:一些屬性說明
【scope】
可以設定boolean或對象,先來說說boolean,這個比較簡單:
1.當設定true的時候,表示繼承父scope,是一個子scope;
2.當設定false的時候,直接使用父scope。
還有一種物件設定方法,就是設定一種隔離的scope,在使用隔離scope的時候,提供了三種方法同隔離之外的地方交互,下面用一個例子來一一說明:
angular.module('yelloxingApp', []).directive("scopeExample", ['$rootScope', function($rootScope) { return { restrict: 'A', scope: { _userDataName: "=userDataName", _onSend: "&onSend", _fromName: "@fromName" }, template: ` <button> 点击按钮调用父级的方法 </button> <input>
- fromName={{newfromname}}
- 这是从父级获取到的{{_userDataName}}
上面是指令的寫法,下面來看看控制器裡面有什麼:
$scope.name = "心叶"; $scope.user = "yelloxing"; $scope.sendMail = function(email){ console.error(email); }
最後別忘了html裡面的使用:
<p></p>
【require】
請求另外的controller,然後作為link方法的第四個參數傳遞進去,我們需要注意的是找出控制器的方法。
尋找控制器的方法可以這樣理解:使用?表示如果在目前指令中找不到所需的控制器,會將null作為傳給link函數的第四個參數,如果加入了^前綴,指令會在上游的指令鏈中尋找require參數所指定的控制器,他們也可以組合,例如require: "?^ngModel",如果沒有前綴,指令將會在自身所提供的控制器中進行查找,如果沒有找到任何控制器(或具有指定名字的指令)就拋出一個錯誤。 (想看更多就到PHP中文網AngularJS開發手冊中學習)
【terminal】
屬性terminal:為true時,指示優先權小於目前指令的指令都不執行,僅執行到本指令。
三:視圖和model之間的資料格式化
類似過濾器的功能,有時候我們希望頁面顯示的是資料經過某種翻譯後的樣子,以便於約定,不過對於資料庫也許簡單的序號會更有益,因此你可能會需要在link中使用下面的方法來實現這個功能:
1.ctrl.$formatters.unshift(function(input) {// model到view的資料格式化});
2.ctrl.$parsers.unshift(function(input) {//view到model的資料格式化})。
上面的$formatters和$parsers就是二個佇列,視圖到model和model到視圖,會方便經過裡面定義的方法的過濾,有點類似管道流,最後流到目的地。
別忘了設定類似require: "?ngModel"這樣的語句去找控制器。
四:視圖和model資料同步問題
有時候在指令裡面透過jquery修改了input的數據,不過angularjs並不會知道,這時候,你可以選擇下面中的一個方法:
1.觸發輸入框change改變,讓Angularjs發現資料改變了,從而去呼叫$setViewValue(value),同步資料:$("input").trigger("change");
2.直接手動觸發同步value到viewValue和modelValue中的行為:ctrl.$setViewValue($scope.info)。
五:幾個零碎的技巧
1.根據輸入框是否合法來設定true或false:ctrl.$setValidity(errorType, boolean);//errorType表示錯誤類別,可以自訂
2.設定監聽指定的一個model值,當然還有監聽集合等方法:$scope.$watch(attrs['ngModel'], function(newValue, oldValue) {});
3.有時候在指令裡面新加入的字串需要被angularjs管理,就可以用下面的方法編譯一下:$compile(newHtml)($scope)。
六:常用方法或服務
解析一段字串(可能是屬性也可能是方法)的方法有二個,直接看下面例子:
$scope.getInfo=function(){ console.log('这是执行了函数的表现'); }; var funName="getInfo()"; //执行方法一: $scope.$eval(funName); //执行方法二: $parse(funName)($scope);
好了,這篇文章到這就結束了(想看更多就到PHP中文網AngularJS使用手冊中學習),有問題的可以在下方留言提問。
以上是關於Angularjs中自訂指令一些有價值的細節和技巧的詳細內容。更多資訊請關注PHP中文網其他相關文章!

去掉重复并排序的方法:1、使用“Array.from(new Set(arr))”或者“[…new Set(arr)]”语句,去掉数组中的重复元素,返回去重后的新数组;2、利用sort()对去重数组进行排序,语法“去重数组.sort()”。

本篇文章给大家带来了关于JavaScript的相关知识,其中主要介绍了关于Symbol类型、隐藏属性及全局注册表的相关问题,包括了Symbol类型的描述、Symbol不会隐式转字符串等问题,下面一起来看一下,希望对大家有帮助。

怎么制作文字轮播与图片轮播?大家第一想到的是不是利用js,其实利用纯CSS也能实现文字轮播与图片轮播,下面来看看实现方法,希望对大家有所帮助!

本篇文章给大家带来了关于JavaScript的相关知识,其中主要介绍了关于对象的构造函数和new操作符,构造函数是所有对象的成员方法中,最早被调用的那个,下面一起来看一下吧,希望对大家有帮助。

本篇文章给大家带来了关于JavaScript的相关知识,其中主要介绍了关于面向对象的相关问题,包括了属性描述符、数据描述符、存取描述符等等内容,下面一起来看一下,希望对大家有帮助。

方法:1、利用“点击元素对象.unbind("click");”方法,该方法可以移除被选元素的事件处理程序;2、利用“点击元素对象.off("click");”方法,该方法可以移除通过on()方法添加的事件处理程序。

本篇文章给大家带来了关于JavaScript的相关知识,其中主要介绍了关于BOM操作的相关问题,包括了window对象的常见事件、JavaScript执行机制等等相关内容,下面一起来看一下,希望对大家有帮助。

foreach不是es6的方法。foreach是es3中一个遍历数组的方法,可以调用数组的每个元素,并将元素传给回调函数进行处理,语法“array.forEach(function(当前元素,索引,数组){...})”;该方法不处理空数组。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

禪工作室 13.0.1
強大的PHP整合開發環境

SublimeText3漢化版
中文版,非常好用

SublimeText3 Linux新版
SublimeText3 Linux最新版

記事本++7.3.1
好用且免費的程式碼編輯器

Dreamweaver CS6
視覺化網頁開發工具