亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

關于Angularjs中自定義指令一些有價值的細節和技巧小結

2019-11-19 13:58:53
字體:
來源:轉載
供稿:網友

一:自定義指令常用模板

下面是大致的說明,不是全面的,后面來具體說明一些沒有提及的細節和重要的相關知識:

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 ng-click="_useParentMethod()">        點擊按鈕調用父級的方法      </button>            <input ng-model="_userDataName"/>      <ul>        <li>fromName={{newfromname}}</li>        <li>這是從父級獲取到的{{_userDataName}}</li>      </ul>`,       link: function($scope, element, attrs) {      //使用@符號可將本地作用域的變量與DOM屬性的值進行綁定,即這里通過@得到父類fromName的值      $scope.newfromname = $scope._fromName;      $scope._useParentMethod = function() {              //使用&符號可以在其中調用父類的方法        $scope._onSend({ "email": { "email": "yelloxing@gmail.com" } });        console.log($scope._userDataName);              };    }  };}]);

上面是指令的寫法,下面來看看控制器里面有什么:

$scope.name = "心葉";$scope.user = "yelloxing";$scope.sendMail = function(email){  console.error(email);}

最后別忘了html里面的使用:

復制代碼 代碼如下:
<div scope-example user-data-name="user" on-send='sendMail(email)' from-name={{name}}></div>

【require】

請求另外的controller,然后作為link方法的第四個參數傳遞進去,我們需要注意的是查找控制器的方法。

查找控制器的方法可以這樣理解:使用?表示如果在當前指令中沒有找到所需要的控制器,會將null作為傳給link函數的第四個參數,如果添加了^前綴,指令會在上游的指令鏈中查找require參數所指定的控制器,他們也可以組合,比如require: "?^ngModel",如果沒有前綴,指令將會在自身所提供的控制器中進行查找,如果沒有找到任何控制器(或具有指定名字的指令)就拋出一個錯誤。

【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)。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
怡红院精品视频| 欧美另类老肥妇| 国产欧美日韩精品丝袜高跟鞋| 国产福利视频一区| 中文字幕九色91在线| 亚洲精品短视频| 精品二区三区线观看| 日韩精品视频在线| 久久久精品免费视频| 91色视频在线导航| 久久久久久噜噜噜久久久精品| 欧美亚州一区二区三区| 国内免费精品永久在线视频| 精品国产成人在线| 亚洲成人久久电影| 日本国产精品视频| 亚洲qvod图片区电影| 国产精品免费久久久| 在线丨暗呦小u女国产精品| 亚洲精品一区二区三区婷婷月| 欧美精品久久久久a| 亚洲无限乱码一二三四麻| 日本成人免费在线| 欧美日韩亚洲视频| 久久久噜噜噜久久| 日韩欧美在线播放| 欧洲美女7788成人免费视频| 国产精品久久久久影院日本| 国产精品美腿一区在线看| 国产精品欧美激情| 欧美wwwxxxx| 91精品久久久久久久| 欧美极品少妇xxxxⅹ裸体艺术| 欧美老肥婆性猛交视频| 97国产成人精品视频| 91成人性视频| 91美女高潮出水| 日韩av快播网址| 中文字幕精品网| 国产精品丝袜白浆摸在线| 91国产美女视频| 97视频免费在线观看| 国产成人福利网站| 国产精品午夜视频| 免费不卡欧美自拍视频| 羞羞色国产精品| 日韩成人av网址| 91美女高潮出水| 欧美激情免费视频| 在线视频免费一区二区| 美女啪啪无遮挡免费久久网站| 日本欧美国产在线| 日韩在线视频线视频免费网站| 成人激情av在线| 久久久噜久噜久久综合| 在线视频亚洲欧美| 国产区精品视频| 国产精品久久久久久久av电影| 久久久精品免费| 亚洲黄页网在线观看| 91精品啪aⅴ在线观看国产| 精品成人国产在线观看男人呻吟| 国产精品盗摄久久久| 国产午夜精品视频免费不卡69堂| 日韩av第一页| 日本精品一区二区三区在线| 北条麻妃一区二区在线观看| 91精品国产色综合| 久久久久久久久久久网站| 欧美激情一级二级| 日韩有码在线播放| 国产亚洲精品美女| 久久成人精品电影| 55夜色66夜色国产精品视频| 精品五月天久久| 色黄久久久久久| 亚洲精品欧美极品| 欧美一区二区三区四区在线| 亚洲综合中文字幕在线观看| 红桃视频成人在线观看| 欧美精品成人在线| 久久久久久久久久久人体| 亚洲精品视频网上网址在线观看| 久久久久五月天| 91色琪琪电影亚洲精品久久| 欧美大片欧美激情性色a∨久久| 国产伦精品一区二区三区精品视频| 91超碰中文字幕久久精品| 日本高清视频一区| 国语自产精品视频在免费| 日韩中文字幕欧美| 黄色91在线观看| 欧美激情奇米色| 成人午夜在线观看| 精品久久久免费| 亚洲综合自拍一区| 日韩av网站在线| 国产亚洲欧美aaaa| 久久久免费av| 久久影视三级福利片| 狠狠躁夜夜躁久久躁别揉| 成人网欧美在线视频| 国产精品成人在线| 久热爱精品视频线路一| 国产中文欧美精品| 亚洲免费一级电影| 韩国美女主播一区| 91精品视频在线| 欧美国产激情18| 亚洲电影免费观看高清完整版在线| 欧美性猛交99久久久久99按摩| 91国产一区在线| 欧美资源在线观看| 色狠狠久久aa北条麻妃| 欧美性20hd另类| 精品亚洲精品福利线在观看| 亚洲欧美中文字幕在线一区| 成人a级免费视频| 日日骚av一区| 日韩动漫免费观看电视剧高清| 国产精品丝袜久久久久久高清| 久久久久久久久久久久久久久久久久av| 久久九九热免费视频| 国产午夜精品全部视频播放| 亚洲第一网中文字幕| 亚洲影视中文字幕| 国内精品400部情侣激情| 国产精品高精视频免费| 一区二区三区精品99久久| 欧美激情一区二区三区在线视频观看| 77777少妇光屁股久久一区| 亚洲国产黄色片| 日本精品性网站在线观看| 成人情趣片在线观看免费| 疯狂做受xxxx高潮欧美日本| 亚洲精品欧美一区二区三区| 最近2019中文字幕在线高清| 大桥未久av一区二区三区| 欧美中在线观看| 日韩中文在线视频| 亚洲免费成人av电影| 欧美综合在线第二页| 国产精品美女午夜av| 久久久国产一区| 欧美一级视频一区二区| 久久久精品视频成人| 欧美精品国产精品日韩精品| 久久久999精品免费| 久久精品亚洲一区| 九九热这里只有在线精品视| 亚洲精品视频免费在线观看| 日韩中文在线中文网三级| 欧美精品18videos性欧| 日韩大陆毛片av| 欧美午夜精品久久久久久久| 亚洲精品v天堂中文字幕| 九九精品视频在线| 日韩精品中文字幕视频在线| 国产精品视频白浆免费视频| 亚洲国产高清自拍| 午夜精品视频网站| 国产精品久久不能| 亚洲成成品网站| 庆余年2免费日韩剧观看大牛|