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

首頁 > 編程 > JavaScript > 正文

Angular.JS中的指令引用template與指令當做屬性詳解

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

一、引用template

對于指令,可以把它簡單的理解成在特定DOM元素上運行的函數,指令可以擴展這個元素的功能。

指令要生效,那么html頭里面要

<html lang="en" ng-app="app">

制定ng-app的值和定義指令的module名字一致:

angular.module('app',[])

指令的完整參數:

angular.module('myApp', []).directive('myDirective', function() { return { restrict: String, priority: Number, terminal: Boolean, template: String or Template Function: function(tElement, tAttrs) {...}, templateUrl: String, replace: Boolean or String, scope: Boolean or Object, transclude: Boolean, controller: String or function(scope, element, attrs, transclude, otherInjectables) { ... }, controllerAs: String, require: String, link: function(scope, iElement, iAttrs) { ... }, compile: // 返回一個對象或連接函數,如下所示: function(tElement, tAttrs, transclude) { return { pre: function(scope, iElement, iAttrs, controller) { ... }, post: function(scope, iElement, iAttrs, controller) { ... } } return function postLink(...) { ... } } }; });

指令可以使用的方式:

restrict[string]

restrict是一個可選的參數。用于指定該指令在DOM中以何種形式被聲明。默認值是A,即以屬性的形式來進行聲明。

可選值如下:

  • E(元素)<my-directive></my-directive>
  • A(屬性,默認值)<div my-directive="expression"></div>
  • C(類名)<div class="my-directive:expression;"></div>
  • M(注釋)<--directive:my-directive expression-->

replace[bool]

replace是一個可選參數,如果設置了這個參數,值必須為true,因為默認值為false。默認值意味著模板會被當作子元素插入到調用此指令的元素內部,

例如上面的示例默認值情況下,生成的html代碼如下:

<my-directive value="http://www.baidu.com" text="百度"><a  rel="external nofollow" rel="external nofollow" rel="external nofollow" >百度</a></my-directive>

如果設置replace=true

<a  rel="external nofollow" rel="external nofollow" rel="external nofollow" value="http://www.baidu.com" text="百度">百度</a>

據我觀察,這種效果只有設置restrict="E"的情況下,才會表現出實際效果。

template[string or function]

template參數是可選的,必須被設置為以下兩種形式之一:

 一段HTML文本;

一個可以接受兩個參數的函數,參數為tElement和tAttrs,并返回一個代表模板的字符串。tElement和tAttrs中的t代表template,是相對于instance的。

不管是返回html文本還是函數,都是最后替換一個html,和replace屬性搭配使用的,先給出一個完整的index.heml directive.js,以這個為例子來說明:

<!doctype html><html lang="en" ng-app="app"><head> <meta charset="utf-8"> <title>My HTML File</title> <link rel="stylesheet" href="bootstrap/css/bootstrap.css" rel="external nofollow" rel="external nofollow" rel="external nofollow" > <script src="angularjs/angular.js"></script> <script src="mydirective.js"></script></head><body> <my-directive></my-directive></body></html>

然后js:

 angular.module('app',[]) .directive('myDirective', function () { return { restrict: 'E', template: '<a  rel="external nofollow" rel="external nofollow" rel="external nofollow" >百度</a>' }; })

最后的運行效果以及firebug查看到的效果:

如果添加指令的replace屬性為ture,那么就不會有這個directvie指令部分了:

上面就是差別。

再說說指令定義里面模板參數是函數的情況,我們改寫html以及js:

<!doctype html><html lang="en" ng-app="app"><head> <meta charset="utf-8"> <title>My HTML File</title> <link rel="stylesheet" href="bootstrap/css/bootstrap.css" rel="external nofollow" rel="external nofollow" rel="external nofollow" > <script src="angularjs/angular.js"></script> <script src="mydirective.js"></script></head><body> <my-directive value="http://www.baidu.com" text="百度"></my-directive></body></html>js文件:angular.module('app',[]) .directive('myDirective', function () { return { restrict: 'EAC', template: function (elem, attr) {  return "<a href='" + attr.value + "'>" + attr.text + "</a>"; } }; })

指令定義的template是一個函數對象,返回一個html的字符串,那么他的elem和attr就是分別代表這個指令和他在index.html里面的屬性:

attr.value和attr.text分別對應:

<my-directive value="http://www.baidu.com" text="百度"></my-directive>

里面的value和text。

不replace的情況:

二、指令當做屬性

上面說過:

angular.module('myApp', [])  .directive('myDirective', function() {  return {  restrict: String, 后面省略

指令restrict有四種用法,默認是A,也就是當做屬性,

  • E(元素)<my-directive></my-directive>
  • A(屬性,默認值)<div my-directive="expression"></div>
  • C(類名)<div class="my-directive:expression;"></div>
  • M(注釋)<--directive:my-directive expression-->

然后如果一個指令直接返回一個函數的時候,其實返回的一個link函數,比如:

angular.module('time', []) .directive('xxx', function() { return function(scope, element, attrs) {

這個是表示直接link。

當指令做屬性的時候,有兩重含義:

      1.在一個html元素里面制定為屬性

      2.js定義的指令名。

看一個例子:

JS:

angular.module('time', []) .controller("Ctrl2", function($scope) { $scope.format = 'M/d/yy h:mm:ss a'; }) // Register the 'myCurrentTime' directive factory method. // We inject $timeout and dateFilter service since the factory method is DI. .directive('myCurrentTime', function($timeout, dateFilter) { // return the directive link function. (compile function not needed) return function(scope, element, attrs) {  var format, // date format  timeoutId; // timeoutId, so that we can cancel the time updates  // used to update the UI  function updateTime() {  element.text(dateFilter(new Date(), format));  }  // watch the expression, and update the UI on change.  scope.$watch(attrs.myCurrentTime, function(value) {  format = value;  updateTime();  });  // schedule update in one second  function updateLater() {  // save the timeoutId for canceling  timeoutId = $timeout(function() {   updateTime(); // update DOM   updateLater(); // schedule another update  }, 1000);  }  // listen on DOM destroy (removal) event, and cancel the next UI update  // to prevent updating time ofter the DOM element was removed.  element.bind('$destroy', function() {  $timeout.cancel(timeoutId);  });  updateLater(); // kick off the UI update process. } });

然后index.html:

<!doctype html><html lang="en" ng-app="time"><head> <meta charset="utf-8"> <title>My HTML File</title> <link rel="stylesheet" href="bootstrap/css/bootstrap.css" rel="external nofollow" rel="external nofollow" rel="external nofollow" > <script src="angularjs/angular.js"></script> <script src="mydirective.js"></script></head><body> <div ng-controller="Ctrl2"> Date format: <input ng-model="format"> <hr/> Current time is: <span my-current-time="format"></span> </div></body></html>

注意:ng-app="time"一定要指明是time。否則無法關聯起來。

分析如下:

  • 給span制定了一個屬性,綁定到了scope里面的format
  • <span my-current-time="format"></span>
  • 定義了輸入框,綁定了scope里面的format
  • <input ng-model="format">
  • 定義了controller -- Ctrl2, 然后引入了scope,定義了變量format
  • 定義了指令myCurrentTime , 然后就是和html里面的my-current-time="format"對應,html里面用破折號連起來,指令就是駝峰樣子的myCurrentTime(首字母小寫)
  • link函數的三個參數,以及attrs的使用:
    return function(scope, element, attrs) {scope.$watch(attrs.myCurrentTime, function(value) {
  • 可看到,myCurrentTime既是指令名字,然后在這個span元素里面又是屬性名,他的值是format的真實值。
  • 用firebug看到:
  • 指令當成屬性,不會有replace起作用的時候,不會被替換也不會插入,就是一個屬性,后面的日期值,其實是updateTime()函數直接寫elem.text的效果。
  • 此處指令當做屬性的作用就是擴展當前元素的功能。

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對武林網的支持。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
97视频免费看| 欧美伊久线香蕉线新在线| 久久精品视频导航| 欧美电影在线观看| 奇门遁甲1982国语版免费观看高清| 国产精品三级网站| 2019中文字幕在线| 久久久国产一区二区三区| 69久久夜色精品国产7777| 亚洲色在线视频| 国产欧美精品一区二区三区介绍| 黑人精品xxx一区| 欧美极品少妇与黑人| 日韩欧美a级成人黄色| 一区二区三区在线播放欧美| 亚洲色在线视频| 亚洲国模精品一区| 欧美成人精品一区| 国产精品成人av性教育| 国产91精品高潮白浆喷水| 久久91亚洲人成电影网站| 亚洲午夜性刺激影院| 欧美性猛交xxxx乱大交3| 色综合久久中文字幕综合网小说| 成人激情免费在线| 欧美成人国产va精品日本一级| 亚洲日韩欧美视频一区| 精品中文字幕视频| 国产精品高潮呻吟久久av黑人| 久久韩国免费视频| 欧美高清视频在线| 欧美老肥婆性猛交视频| 奇米4444一区二区三区| 国产精品亚洲美女av网站| 97视频在线观看视频免费视频| 日本一区二区不卡| 97在线精品视频| 国产精品99久久久久久久久久久久| 亚洲午夜av电影| 久久激情五月丁香伊人| 欧美亚洲国产另类| 成人免费看吃奶视频网站| 欧美巨乳在线观看| 欧美日韩亚洲高清| 中文字幕欧美日韩精品| 日韩国产欧美精品在线| 伊人久久久久久久久久久久久| 国产精品aaa| 国语自产精品视频在线看抢先版图片| 成人午夜在线影院| 青草青草久热精品视频在线网站| 欧美一级淫片aaaaaaa视频| 精品久久久久久久久久久| 日韩在线播放av| 国产精品极品美女在线观看免费| 国模叶桐国产精品一区| 欧美亚州一区二区三区| 亚洲乱码国产乱码精品精天堂| 亚洲国产免费av| 久久视频在线免费观看| 国产日本欧美一区二区三区| 色偷偷综合社区| 精品久久久久人成| 亚洲欧美日韩网| 69av在线播放| 国产精品久久久久久久7电影| 国产精品wwwwww| 久久999免费视频| 亚洲第一区第二区| 欧美激情综合亚洲一二区| 亚洲国产成人精品电影| 综合欧美国产视频二区| 国产精品久久久久一区二区| 久久精品精品电影网| 日韩国产精品一区| 中文字幕精品一区久久久久| 国产精品夫妻激情| 欧美激情亚洲视频| 日韩一区av在线| 国产欧美一区二区三区在线看| 91精品啪在线观看麻豆免费| 国产精品视频yy9099| 国产一区二区黑人欧美xxxx| 欧美日韩电影在线观看| 欧美香蕉大胸在线视频观看| 国产一区二区色| 日韩在线免费高清视频| 日韩美女免费视频| 亚洲欧洲一区二区三区久久| 在线观看视频99| 日本成人激情视频| 久久国内精品一国内精品| 久久久久久久久久亚洲| 亚洲欧美激情另类校园| 亚洲一区二区三区四区在线播放| 日韩精品视频免费在线观看| 久久精彩免费视频| 夜夜嗨av色综合久久久综合网| 国产精品91久久| www.日韩系列| 精品日韩中文字幕| 成人有码在线播放| 日韩精品久久久久久久玫瑰园| 亚洲精品不卡在线| 欧美日本亚洲视频| 久久精品久久久久久国产 免费| 国产精品久久二区| 26uuu另类亚洲欧美日本一| 亚洲自拍av在线| 国产激情久久久久| 欧美日韩国产激情| 国产91精品久久久久久久| 热久久视久久精品18亚洲精品| 91精品视频免费看| 亚洲伊人一本大道中文字幕| 欧美一级大片视频| 大胆欧美人体视频| 日韩av电影中文字幕| 国产免费一区二区三区在线观看| 亚洲区一区二区| 国产欧美一区二区三区久久| 欧美三级xxx| 国产成人精品亚洲精品| 91久久久久久久| 亚洲福利在线播放| 国产精品久久久91| 久久免费成人精品视频| 8x拔播拔播x8国产精品| 97国产suv精品一区二区62| 91精品国产高清自在线看超| 亚洲大胆人体视频| 92看片淫黄大片欧美看国产片| 亚洲女人天堂av| 欧美精品久久久久久久免费观看| 最近2019年中文视频免费在线观看| 亚洲高清免费观看高清完整版| 国产日韩精品在线| 中文字幕日本欧美| 亚洲色图欧美制服丝袜另类第一页| …久久精品99久久香蕉国产| 欧美成人激情视频| 亚洲欧美中文字幕在线一区| 亚洲精品乱码久久久久久金桔影视| 日韩精品免费观看| 久久精品99久久久香蕉| 亚洲精品视频在线观看视频| 久久久精品国产网站| 热re91久久精品国99热蜜臀| 日韩美女福利视频| 亚洲人成电影在线| 日韩av电影手机在线| 亚洲一区二区免费| 国产精品白嫩美女在线观看| 91亚洲精品久久久久久久久久久久| 中文字幕日韩在线观看| 中文字幕精品国产| 欧美一区二区色| 国产精品久久久久久久久久尿| 欧美日韩亚洲国产一区| 国产精品福利在线观看| 日韩精品在线观看视频| 北条麻妃久久精品| 欧美中文字幕在线观看| 久久视频在线视频|