AngularJs 指令directive之controller,link,compile

简介:

关于自定义指令的命名,你可以随便怎么起名字都行,官方是推荐用[命名空间-指令名称]这样的方式,像ng-controller。不过你可千万不要用 ng-前缀了,防止与系统自带的指令重名。另外一个需知道的地方,指令命名时用驼峰规则,使用时用-分割各单词。如:定义myDirective,使用时 像这样:<my-directive>。

这里列出directive的合法命名:

  • ng:bind
  • ng-bind
  • ng_bind
  • x-ng-bind
  • data-ng-bind
我是教师,在新建试题输入分数的时候应该只能输入数字才对,输入其他内容是不合法的,而且我希望这个分数是1~10之间的数字。能否只在输入框上加一个属性.我们定义一个叫做fractionNum的指令如下
Java代码   收藏代码
  1. app.directive('fractionNum',function(){  
  2.     return {  
  3.         link : function(scope, elements, attrs, controller){  
  4.             elements[0].onkeyup = function(){  
  5.                 if(isNaN(this.value) || this.value<1 || this.value>10){  
  6.                     this.style.borderColor = 'red';  
  7.                 }  
  8.                 else{  
  9.                     this.style.borderColor = '';  
  10.                 }  
  11.             };  
  12.         }  
  13.     };  
  14. });  
link的值是一个函数,用来定义指令的行为。从传入的参数中可以获取到当前元素,我们便可以拿当前元素开刀了。我在此处监听当前元素的keyup事件,获取元素的值,如果不是1~10之间的数字,则把输入框的边框颜色变为红色。这下这个指令就可以工作了。定义好的指令就可以在模板中使用了,使用方法如下:
Java代码   收藏代码
  1. 分数:<input type="text" ng-model="question.fraction" fraction-num /><br />  
 
 
controller,link,compile有什么不同
Java代码   收藏代码
  1. //directives.js增加exampleDirective  
  2. phonecatDirectives.directive('exampleDirective', function() {  
  3.     return {  
  4.         restrict: 'E',  
  5.         template: '<p>Hello {{number}}!</p>',  
  6.         controller: function($scope, $element){  
  7.             $scope.number = $scope.number + "22222 ";  
  8.         },  
  9.         //controllerAs:'myController',  
  10.         link: function(scope, el, attr) {  
  11.             scope.number = scope.number + "33333 ";  
  12.         },  
  13.         compile: function(element, attributes) {  
  14.             return {  
  15.                 pre: function preLink(scope, element, attributes) {  
  16.                     scope.number = scope.number + "44444 ";  
  17.                 },  
  18.                 post: function postLink(scope, element, attributes) {  
  19.                     scope.number = scope.number + "55555 ";  
  20.                 }  
  21.             };  
  22.         }  
  23.     }  
  24. });  
  25.   
  26. //controller.js添加  
  27. dtControllers.controller('directive2',['$scope',  
  28.     function($scope) {  
  29.         $scope.number = '1111 ';  
  30.     }  
  31. ]);  
  32.   
  33. //html  
  34. <body ng-app="phonecatApp">  
  35.     <div ng-controller="directive2">  
  36.         <example-directive></example-directive>  
  37.     </div>  
  38. </body>  
 运行结果:
Java代码   收藏代码
  1. Hello 1111 22222 44444 55555 !    
  由结果可以看出来,controller先运行,compile后运行,link不运行(link就是compile中的postLink)。将上例中的compile注释掉运行结果:
Java代码   收藏代码
  1. Hello 1111 22222 33333 !    
  由结果可以看出来,controller先运行,link后运行,link和compile不兼容。compile改变dom,link事件的触发和绑定
 
相关文章
|
存储 安全 API
阿里云oss收费标准新版介绍
阿里云对象存储服务(Object Storage Service,简称OSS)是阿里云提供的一种海量、安全、低成本、高可靠的云存储服务。它适用于各种场景,如网站、移动应用、大数据分析、备份与归档等。OSS提供标准的RESTful API接口,支持多种语言SDK,方便用户进行文件上传、下载、管理和授权等操作。
|
IDE 开发工具
IntelliJ插件开发教程之新建Action
认识Action 在IDE编辑器中可以通过右键打开选项,如下图所示,这里的动作便是Action,同时在顶部的ToolBar也会有相应的Action,如下图所示。可能大家对我这个IDE的UI有点陌生,其实这是2022.3版本的IDEA开启了New UI,NEW UI还是内测中,需要手动开启,设置位置在:Settings->appearance&behavior -> New UI
IntelliJ插件开发教程之新建Action
|
12月前
|
前端开发 应用服务中间件 API
|
12月前
|
Java Linux 测试技术
JMeter 介绍与安装
Apache JMeter 是一款基于Java的开源性能和负载测试工具,常用于测试Web应用、Web服务、数据库及其他网络服务的性能。它具备跨平台特性,支持Windows、Mac及Linux系统,并可通过插件进行扩展。JMeter不仅能模拟大量用户访问以测试服务器承压能力,还适用于接口测试,支持分布式部署与UI及命令行操作模式。
|
人工智能 弹性计算 自然语言处理
AI奇思妙想之旅 —— 操作系统智能助手OS Copilot
AI奇思妙想之旅 —— 操作系统智能助手OS Copilot
391 1
|
Ubuntu Linux 数据库
在Linux中,如何更新软件包?
在Linux中,如何更新软件包?
|
数据可视化 Python
Python的Matplotlib库创建动态图表
【8月更文挑战第19天】Matplotlib是Python中广泛使用的数据可视化库,擅长生成静态图表如折线图、散点图等。本文介绍如何利用其创建动态图表,通过动画展示数据变化,加深对数据的理解。文章涵盖动态折线图、散点图、柱状图、饼图及热力图的制作方法,包括开启交互模式、更新数据和重绘图表等关键步骤,帮助读者掌握Matplotlib动态图表的实用技巧。
|
存储 运维 监控
mysql开启审计日志
mysql开启审计日志
495 0
|
存储 SQL 缓存
大数据基本概念与应用场景
大数据基本概念与应用场景
|
JSON 算法 安全
金润·核验通-银行卡三要素验证接口文档
银行卡三要素验证接口介绍:不限银行,比对姓名、身份证号、银行卡号的一致性,核验持卡人信息真实性 更新时间:实时 接口类型:API接口 数据优势:直连官方数据,合法合规、权威、精确 数据安全:仅确认通过与不通过,保护个人信息安全 计费方式:核验计费,详情请咨询
金润·核验通-银行卡三要素验证接口文档

热门文章

最新文章