最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳解angular 中的自定義指令之詳解API

 更新時(shí)間:2017年06月20日 15:02:33   作者:小夢(mèng)想丶  
本篇文章主要介紹了angular 中的自定義指令之詳解API,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧

自定義屬性的四種類(lèi)別

分為: 元素E,屬性A,注釋M,類(lèi)C , 分別如下:

 <my-dir></my-dir>
 <span my-dir="exp"></span>
 <!-- directive: my-dir exp -->
 <span class="my-dir: exp;"></span>

簡(jiǎn)單創(chuàng)建一個(gè)指令

html結(jié)構(gòu):

<div ng-controller="myCtrl">
 <div my-customer></div>
</div>

JavaScript結(jié)構(gòu):

angular.module('myApp', [])
  .controller('myCtrl', ['$scope', function($scope) {
   $scope.customer = {
    name: 'Naomi',
    address: '1600 Amphitheatre'
   };
  }])
  .directive('myCustomer', function() {
   return {
    template: 'Name: {{customer.name}} Address: {{customer.address}}'
   };
  });

輸出:

Name: Naomi Address: 1600 Amphitheatre

說(shuō)明: 此處,myCtrl 中定義的 $scope.customer 屬性和屬性值都在指令中的模板使用了。同樣的,在指令return 對(duì)象中的 template 也可被替換成一路徑,在路徑html中書(shū)寫(xiě)和template中同樣的代碼,使用這種方式,可以操作更多代碼。

templateUrl 函數(shù)式編程

html結(jié)構(gòu):

<div ng-controller="myCtrl">
  <div my-customer></div>
</div>

javascript結(jié)構(gòu):

 angular.module('myApp', [])
 .controller('myCtrl', ['$scope', function($scope) {
  $scope.customer = {
   name: 'Naomi',
   address: '1600 Amphitheatre'
  };
   }])
 .directive('myCustomer', function() {
  return {
   templateUrl: function(elem, attr) {
    return 'customer-' + attr.type + '.html';
   }
  };
 });

不同的templateUrl ①

 Name: {{customer.name}}

不同的templateUrl ②

 Address: {{customer.address}}

輸出結(jié)果:

Name: Naomi
Address: 1600 Amphitheatre

說(shuō)明: templateUrl 的值可以是一個(gè)函數(shù)返回值,返回用于指令中的html模板的url。

隔離指令的作用域

① 通過(guò)不同的controller

html結(jié)構(gòu):

<div ng-app="myApp">
  <div ng-controller="myCtrl1">
    <my-customer></my-customer>
  </div>
  <div ng-controller="myCtrl2">
    <my-customer></my-customer>
  </div>
</div>

javascript結(jié)構(gòu):

angular.module('myApp', [])
  .controller('myCtrl1', ['$scope', function($scope) {
   $scope.customer = {
    name: 'Naomi',
    address: '1600 Amphitheatre'
   };
  }])
  .controller('myCtrl2', ['$scope', function($scope) {
   $scope.customer = {
    name: 'Igor',
    address: '123 Somewhere'
   };
  }])
  .directive('myCustomer', function() {
   return {
    restrict: 'E',
    templateUrl: 'my-customer.html'
   };
  });

templateUrl html 結(jié)構(gòu):

 Name: {{customer.name}} Address: {{customer.address}}

輸出結(jié)果:

 Name: Naomi Address: 1600 Amphitheatre
 Name: Igor Address: 123 Somewhere

說(shuō)明: 可見(jiàn) 不同的controller 有不同的作用范圍。雖然指令一樣,每次渲染都是分離的,所以我們可以抽象出來(lái)指令,用于html模板和代碼的重用,封裝。但是這樣又不是很好,因?yàn)橛昧藘蓚€(gè)controller,我們可以使用指令中的scope而不是controller里的scope來(lái)替代,具體做法是將外部的scope 映射到指令內(nèi)部的scope, 如下:

② 通過(guò)指令屬性映射scope

html結(jié)構(gòu):

<div ng-app="myApp" ng-controller="myCtrl">
 <my-customer info="naomi"></my-customer>
 <my-customer info="igor"></my-customer>
</div>

javascript 結(jié)構(gòu):

 angular.module('myApp', [])
  .controller('myCtrl', ['$scope', function($scope) {
   $scope.naomi = { name: 'Naomi', address: '1600 Amphitheatre' };
   $scope.igor = { name: 'Igor', address: '123 Somewhere' };
  }])
  .directive('myCustomer', function() {
   return {
    restrict: 'E',
    scope: {
     customerInfo: '=info'
    },
    templateUrl: 'my-customer-iso.html'
   };
  });

templateUrl html結(jié)構(gòu):

Name: {{customerInfo.name}} Address: {{customerInfo.address}}

編譯后的html結(jié)果:

 Name: Naomi Address: 1600 Amphitheatre
 Name: Igor Address: 123 Somewhere

③ 指令中的如果定義scope屬性則html中的scope不會(huì)直接繼承controller中的scope,在html中使用的都需要在scope:{}中聲明,否則就是undefined

html 結(jié)構(gòu):

 <div ng-app="myApp" ng-controller="myCtrl">
   <my-customer info="naomi"></my-customer>
 </div>

javascript結(jié)構(gòu):

 angular.module('myApp', [])
  .controller('myCtrl', ['$scope', function($scope) {
   $scope.naomi = { name: 'Naomi', address: '1600 Amphitheatre' };
   $scope.vojta = { name: 'Vojta', address: '3456 Somewhere Else' };
  }])
  .directive('myCustomer', function() {
   return {
    restrict: 'E',
    scope: {
     customerInfo: '=info'
    },
    templateUrl: 'my-customer-plus-vojta.html'
   };
  });

  templateUrl html結(jié)構(gòu):

Name: {{customerInfo.name}} Address: {{customerInfo.address}}
<br>
Name: {{vojta.name}} Address: {{vojta.address}}

html編譯后的結(jié)果:

Name: Naomi Address: 1600 Amphitheatre
Name: Address:

說(shuō)明: vojta 在指令中的scope沒(méi)有被定義,不會(huì)直接繼承在controller中的,那么他就是undefined,所以就是空白(什么都不顯示)

可操作DOM的指令

創(chuàng)建一個(gè)用于操作dom的指令,如果需要dom操作也都應(yīng)該放在指令里。

html 結(jié)構(gòu):

 <div ng-app="myApp" ng-controller="myCtrl">
  Date format: <input ng-model="format"> <hr/>
  Current time is: <span my-current-time="format"></span>
 </div>

javascript結(jié)構(gòu):

angular.module('myApp', [])
  .controller('myCtrl', ['$scope', function($scope) {
    $scope.format = 'M/d/yy h:mm:ss a';
  }])
  .directive('myCurrentTime', function($interval, dateFilter) {
    return {
     restrict: 'AE',
     link: function(scope, element, attr){
       var format, timeoutId;

      /* 更新時(shí)間函數(shù) */
      function updateTime() {
       element.text(dateFilter(new Date(), format));
      }

      /* 監(jiān)視時(shí)間格式的改變 */
      var attrWatch = scope.$watch(attrs.myCurrentTime, function(value) {
       format = value;
       updateTime();
      });

      /* 定時(shí)器 */
      timeoutId = $interval(function() {
       updateTime(); // update DOM
      }, 1000);

      /* 頁(yè)面跳轉(zhuǎn)后移除定時(shí)器防止內(nèi)存泄露 */
      element.on('$destroy', function() {
       $interval.cancel(timeoutId);
       attrWatch(); // 移除watch
      });
    }
   };
  });

說(shuō)明: 在link函數(shù)中,操作dom節(jié)點(diǎn),讓dom的文本節(jié)點(diǎn)動(dòng)態(tài)顯示時(shí)間跳動(dòng)。在頁(yè)面跳轉(zhuǎn)之后及時(shí)清除定時(shí)器和監(jiān)視器以免發(fā)生內(nèi)存泄漏。

通過(guò)transclude和ng-transclude創(chuàng)建可包裹其他元素的指令

html結(jié)構(gòu):

 <div ng-app="myApp" ng-controller="myCtrl">
   <my-dialog>Check out the contents, {{name}}!</my-dialog>
 </div>

javascript結(jié)構(gòu):

 angular.module('myApp', [])
  .controller('myCtrl', ['$scope', function($scope) {
    $scope.name = 'Tobias';
  }])
  .directive('myDialog', function() {
   return {
    restrict: 'E',
    transclude: true,
    scope: {},
    templateUrl: 'my-dialog.html',
    link: function(scope) {
      scope.name = 'Jeff';
    }
 };
});

templateUrl html 結(jié)構(gòu):

 <div class="alert" ng-transclude></div>

編譯后的html結(jié)構(gòu):

Check out the contents, Tobias!

說(shuō)明: 指令中的scope本應(yīng)隔離controller中的作用域的,但是由于設(shè)置了transclude=true選項(xiàng),scope就會(huì)繼承controller中的定義,所以最終是Tobias而不是Jeff。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Angular5給組件本身的標(biāo)簽添加樣式class的方法

    Angular5給組件本身的標(biāo)簽添加樣式class的方法

    本篇文章主要介紹了Angular 5 給組件本身的標(biāo)簽添加樣式class的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-04-04
  • 基于AngularJS實(shí)現(xiàn)頁(yè)面滾動(dòng)到底自動(dòng)加載數(shù)據(jù)的功能

    基于AngularJS實(shí)現(xiàn)頁(yè)面滾動(dòng)到底自動(dòng)加載數(shù)據(jù)的功能

    本文主要給大家介紹基于AngularJS實(shí)現(xiàn)頁(yè)面滾動(dòng)到底自動(dòng)加載數(shù)據(jù)的功能,通過(guò)第三方控件來(lái)實(shí)現(xiàn),感興趣的朋友跟著小編一起看看具體實(shí)現(xiàn)代碼吧
    2015-10-10
  • 基于AngularJS實(shí)現(xiàn)表單驗(yàn)證功能

    基于AngularJS實(shí)現(xiàn)表單驗(yàn)證功能

    這篇文章主要為大家詳細(xì)介紹了基于AngularJS實(shí)現(xiàn)表單驗(yàn)證功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-07-07
  • AngularJS自定義服務(wù)與fliter的混合使用

    AngularJS自定義服務(wù)與fliter的混合使用

    這篇文章主要介紹了AngularJS自定義服務(wù)與fliter的混合使用的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2016-11-11
  • AngularJS實(shí)現(xiàn)標(biāo)簽頁(yè)的兩種方式

    AngularJS實(shí)現(xiàn)標(biāo)簽頁(yè)的兩種方式

    這篇文章分別給大家介紹了AngularJS實(shí)現(xiàn)標(biāo)簽頁(yè)的兩種方式,一種是通過(guò)普通指令實(shí)現(xiàn)標(biāo)簽頁(yè),另外一種是通過(guò)自定義指令實(shí)現(xiàn)的標(biāo)簽頁(yè),有需要的朋友們可以來(lái)參考借鑒,下面來(lái)一起看看吧。
    2016-09-09
  • Angular4學(xué)習(xí)筆記之實(shí)現(xiàn)綁定和分包

    Angular4學(xué)習(xí)筆記之實(shí)現(xiàn)綁定和分包

    本篇文章主要介紹了Angular4學(xué)習(xí)筆記之實(shí)現(xiàn)綁定和分包,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-08-08
  • Angular處理未可知異常錯(cuò)誤的方法詳解

    Angular處理未可知異常錯(cuò)誤的方法詳解

    這篇文章主要給大家介紹了關(guān)于Angular如何處理未可知異常錯(cuò)誤的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • 關(guān)于Angularjs中跨域設(shè)置白名單問(wèn)題

    關(guān)于Angularjs中跨域設(shè)置白名單問(wèn)題

    這篇文章主要介紹了Angularjs中關(guān)于跨域設(shè)置白名單問(wèn)題,需要的朋友可以參考下
    2018-04-04
  • 詳解AngularJs中$resource和restfu服務(wù)端數(shù)據(jù)交互

    詳解AngularJs中$resource和restfu服務(wù)端數(shù)據(jù)交互

    之前小編和大家分享過(guò)使用$http同服務(wù)器進(jìn)行通信,但是功能上比較簡(jiǎn)單,angularjs還提供了另外一個(gè)可選的服務(wù)$resource,使用它可以非常方便的同支持restful的服務(wù)單進(jìn)行數(shù)據(jù)交互。下面來(lái)一起看看吧。
    2016-09-09
  • angularjs $http調(diào)用接口的方式詳解

    angularjs $http調(diào)用接口的方式詳解

    今天小編就為大家分享一篇angularjs $http調(diào)用接口的方式詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-08-08

最新評(píng)論

兖州市| 望都县| 赫章县| 渝北区| 拜城县| 伽师县| 武平县| 阿巴嘎旗| 措勤县| 新田县| 高唐县| 牡丹江市| 上栗县| 固始县| 塔城市| 普洱| 陵川县| 蓬莱市| 东乌珠穆沁旗| 锡林郭勒盟| 温宿县| 湟源县| 临清市| 新蔡县| 缙云县| 共和县| 金阳县| 东辽县| 西藏| 遵义市| 荣昌县| 遂平县| 潞西市| 滁州市| 遂溪县| 陆良县| 靖西县| 泗阳县| 太保市| 酒泉市| 许昌市|