返回顶部
首页 > 资讯 > 前端开发 > JavaScript >angular中自定义指令的示例分析
  • 527
分享到

angular中自定义指令的示例分析

2024-04-02 19:04:59 527人浏览 泡泡鱼
摘要

这篇文章将为大家详细讲解有关angular中自定义指令的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。自定义属性的四种类别分为: 元素E,属性A,注释M,类C ,

这篇文章将为大家详细讲解有关angular中自定义指令的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

自定义属性的四种类别

分为: 元素E,属性A,注释M,类C , 分别如下:

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

简单创建一个指令

html结构:

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

javascript结构:

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

说明: 此处,myCtrl 中定义的 $scope.customer 属性和属性值都在指令中的模板使用了。同样的,在指令return 对象中的 template 也可被替换成一路径,在路径html中书写和template中同样的代码,使用这种方式,可以操作更多代码。

templateUrl 函数式编程

html结构:

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

javascript结构:

 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}}

输出结果:

Name: Naomi
Address: 1600 Amphitheatre

说明: templateUrl 的值可以是一个函数返回值,返回用于指令中的html模板的url。

隔离指令的作用域

① 通过不同的controller

html结构:

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

javascript结构:

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 结构:

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

输出结果:

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

说明: 可见 不同的controller 有不同的作用范围。虽然指令一样,每次渲染都是分离的,所以我们可以抽象出来指令,用于html模板和代码的重用,封装。但是这样又不是很好,因为用了两个controller,我们可以使用指令中的scope而不是controller里的scope来替代,具体做法是将外部的scope 映射到指令内部的scope, 如下:

② 通过指令属性映射scope

html结构:

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

javascript 结构:

 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结构:

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

编译后的html结果:

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

③ 指令中的如果定义scope属性则html中的scope不会直接继承controller中的scope,在html中使用的都需要在scope:{}中声明,否则就是undefined

html 结构:

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

javascript结构:

 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结构:

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

html编译后的结果:

Name: Naomi Address: 1600 Amphitheatre
Name: Address:

说明: vojta 在指令中的scope没有被定义,不会直接继承在controller中的,那么他就是undefined,所以就是空白(什么都不显示)

可操作DOM的指令

创建一个用于操作dom的指令,如果需要dom操作也都应该放在指令里。

html 结构:

 <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结构:

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;

      
      function updateTime() {
       element.text(dateFilter(new Date(), format));
      }

      
      var attrWatch = scope.$watch(attrs.myCurrentTime, function(value) {
       format = value;
       updateTime();
      });

      
      timeoutId = $interval(function() {
       updateTime(); // update DOM
      }, 1000);

      
      element.on('$destroy', function() {
       $interval.cancel(timeoutId);
       attrWatch(); // 移除watch
      });
    }
   };
  });

说明: 在link函数中,操作dom节点,让dom的文本节点动态显示时间跳动。在页面跳转之后及时清除定时器和监视器以免发生内存泄漏。

通过transclude和ng-transclude创建可包裹其他元素的指令

html结构:

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

javascript结构:

 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 结构:

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

编译后的html结构:

Check out the contents, Tobias!

说明: 指令中的scope本应隔离controller中的作用域的,但是由于设置了transclude=true选项,scope就会继承controller中的定义,所以最终是Tobias而不是Jeff。

关于“angular中自定义指令的示例分析”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

--结束END--

本文标题: angular中自定义指令的示例分析

本文链接: https://www.lsjlt.com/news/76761.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • angular中自定义指令的示例分析
    这篇文章将为大家详细讲解有关angular中自定义指令的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。自定义属性的四种类别分为: 元素E,属性A,注释M,类C ,...
    99+
    2024-04-02
  • Angularjs中自定义指令的示例分析
    小编给大家分享一下Angularjs中自定义指令的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!一:自定义指令常用模板下...
    99+
    2024-04-02
  • AngularJS自定义指令的示例分析
    这篇文章主要介绍AngularJS自定义指令的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!前言除了 AngularJS 内置的指令外,我们还可以创建自定义指令。 通过 .d...
    99+
    2024-04-02
  • Vue自定义指令的示例分析
    这篇文章主要介绍Vue自定义指令的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!在 AngularJs 中,它的指令使用 directive ( name,factor_fu...
    99+
    2024-04-02
  • Vue.directive自定义指令的示例分析
    这篇文章主要介绍Vue.directive自定义指令的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!1.复习一下Vue自定义指令的代码,结果出现一个很无语的结果,先贴代码。2...
    99+
    2024-04-02
  • Angular1.x自定义指令的示例分析
    小编给大家分享一下Angular1.x自定义指令的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!具体如下:调用Modul...
    99+
    2024-04-02
  • vue.js内部自定义指令与全局自定义指令的示例分析
    这篇文章将为大家详细讲解有关vue.js内部自定义指令与全局自定义指令的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。directive这个单词是我们写自定义指令...
    99+
    2024-04-02
  • Vue.js源码分析之自定义指令的示例分析
    这篇文章给大家分享的是有关Vue.js源码分析之自定义指令的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。前言除了核心功能默认内置的指令 (v-model 和 v-show),Vue 也允许注册自定义指令...
    99+
    2023-06-14
  • Angular自定义指令Tooltip的方法实例
    目录目录结构编写 tooltip 组件编写 tooltip 指令页面上调用总结Yeah,关注我的读者应该知道,上一篇文章了解 Angular 开发的内容,我们已经概览了 Angula...
    99+
    2024-04-02
  • Angular中怎么以Tooltip自定义指令
    本文小编为大家详细介绍“Angular中怎么以Tooltip自定义指令”,内容详细,步骤清晰,细节处理妥当,希望这篇“Angular中怎么以Tooltip自定义指令”文章能帮助大家解决疑惑,下面跟着小编的思...
    99+
    2024-04-02
  • Angular中如何自定义创建指令
    小编给大家分享一下Angular中如何自定义创建指令,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!指令介绍在 Angular 中有三种类型的指令:组件,有模板的指...
    99+
    2023-06-14
  • 浅析Angular中的自定义结构型/属性型指令
    Angular指令分为三种,组件(带模板指令)、结构型指令(改变宿主文档结构)、属性型指令(改变宿主行为),下面主要介绍自定义结构型指令和自定义属性型指令。一、自定义结构型指令一个元素上只能放一个结构型指令,结构型指令的书写形式为*指令名,...
    99+
    2023-05-14
    Angular
  • angular指令中preLink和postLink函数的示例分析
    这篇文章将为大家详细讲解有关angular指令中preLink和postLink函数的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。指令模板选项有complie和link两个字段,两者之间存在如下...
    99+
    2023-06-15
  • phpunit自定义的示例分析
    这篇文章主要介绍phpunit自定义的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!下载:wget  https://phar.phpunit.de/ph...
    99+
    2024-04-02
  • DatePickerDialog中自定义样式的示例分析
    小编给大家分享一下DatePickerDialog中自定义样式的示例分析,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!1.增加Theme主题new DatePickerDialog(thi...
    99+
    2024-04-02
  • AngularJS中自定义服务的示例分析
    这篇文章将为大家详细讲解有关AngularJS中自定义服务的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。前言1、3种创建自定义服务的方式。FactoryServ...
    99+
    2024-04-02
  • docker中资源指标API及自定义指标API的示例分析
    这篇文章给大家分享的是有关docker中资源指标API及自定义指标API的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。    以前是用heapster来收集资源指标才能看,现在hea...
    99+
    2023-06-04
  • vue自定义指令directives及其常用钩子函数的示例分析
    这篇文章主要为大家分析了vue自定义指令directives及其常用钩子函数的示例分析的相关知识点,内容详细易懂,操作细节合理,具有一定参考价值。如果感兴趣的话,不妨跟着跟随小编一起来看看,下面跟着小编一起深入学习“vue自定义指令dire...
    99+
    2023-06-28
  • Angular中如何自定义结构型指令和属性型指令
    今天小编给大家分享一下Angular中如何自定义结构型指令和属性型指令的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。一、自定...
    99+
    2023-07-05
  • HTML5中data-*自定义属性的示例分析
    这篇文章将为大家详细讲解有关HTML5中data-*自定义属性的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。一、关于html元素的特性1.html元素都存在一些...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作