热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Angular的Directive,以及copmile和link方法

Directive,指令在Angular中,是指嵌套在HTML模板中的指令,如Angular自带的ng-appng-controller等,自带指令使用ng-前缀,自定义指令请避免使用。指令的声明形
Directive,指令

在Angular中,是指嵌套在HTML模板中的指令,如Angular自带的ng-app ng-controller等,自带指令使用ng-前缀,自定义指令请避免使用。

指令的声明形式

HTML标签元素指令,HTML标签属性指令,Class类指令和HTML注释指令。

其中一般常用的为指令标签和属性标签。

简单的Directive定义

app.directive("myDirective", function() {
return {
restrict: "A",
templateUrl: "context.html",
replace: true
}
})
其中,
  • restrict指定指令的声明形式

A表示标签属性指令,如  

E表示标签元素指令,如

Class(C)和注释(M)两种形式请避免使用。

同时支持多种声明形式,可以写为"EA"

如果省略,系统默认为“A”。

  • templateUrl
指令标签内容的模板URL。对于简单的模板,也可以使用template,直接写模板内容。
  • replace

表示指令产生的内容是否会替换整个标签,还是插入到标签的内容。

指令命名规范

指令定义时,需要使用驼峰格式命令,如myDirective。

HTML中引用指令时,需要把驼峰命名进行拆分,可以采用多种方式,如

  1. 冒号:my:directive
  2. 横线:my-directive(推荐)
  3. 下划线:my_directive
  4. x-前缀
  5. data-前缀

推荐使用横线的形式。

指令中的compile和link

以上示例的Directive非常的简单,只是替换一个模板,这样简单的功能完全可以使用ng-include直接嵌入模板的内容。

如果需要给Directive自定义事件或则用程序生成模板,该如何实现呢。这里,就需要用到compile和link函数了。


基于性能的考虑,Angular中,模板的处理过程分为compile和link两个阶段,Directive也会在这两个阶段分别进行处理。

compile阶段:compile阶段主要是对模板内容的处理,可以对模板内容进行修改,如ng-repeat就是在compile阶段执行的。

link阶段:link阶段主要对模板进行数据绑定和事件绑定等操作。

compile阶段

compile阶段会把HTML片段转换为DOM对象,在compile方法中对DOM进行操作。
模仿ng-repeat指令,开发一个my-repeat指令,对子元素重复指定的次数。

先看下compile函数的定义。

function compile(element, attrs, transclude) { ... }
element为指令所在的DOM对象,attrs为元素的属性字典,其他参数暂时未用到,可查看API。

app.directive('myRepeat', function($document) {
return {
restrict: 'A',
compile: function(element, attrs) {
var template = $(element).children().clone();
for(var i=0; i $(element).append(template.clone());
}
}
}
});


  • Hello, my Repeat

link阶段

link阶段主要是对元素绑定scope数据和进行事件绑定。

function link(scope, element, attrs, controller) { ... }

scope为模板的作用域数据,其他参数名称自解释。

以一个密码框失去焦点时调用函数进行密码复杂度校验的指令为例。

app.directive('myBlur', function($document) {
return {
link: function(scope, element, attrs) {
$(element).bind('blur', function(e){
scope.$apply(attrs.myBlur);
});
}
}
})


其中checkComplex为controller中的方法。


在Directive中compile和link函数不能同时出现,如果定义了compile函数,则会忽略link函数。

如果compile后要对数据进行绑定事件,则compile的返回值就定义为link函数。在link阶段,会调用compile的返回值作为link函数。



推荐阅读
  • JavaScript和HTML之间的交互是经由过程事宜完成的。事宜:文档或浏览器窗口中发作的一些特定的交互霎时。能够运用侦听器(或处置惩罚递次来预订事宜),以便事宜发作时实行相应的 ... [详细]
  • 本文介绍了绕过WAF的XSS检测机制的方法,包括确定payload结构、测试和混淆。同时提出了一种构建XSS payload的方法,该payload与安全机制使用的正则表达式不匹配。通过清理用户输入、转义输出、使用文档对象模型(DOM)接收器和源、实施适当的跨域资源共享(CORS)策略和其他安全策略,可以有效阻止XSS漏洞。但是,WAF或自定义过滤器仍然被广泛使用来增加安全性。本文的方法可以绕过这种安全机制,构建与正则表达式不匹配的XSS payload。 ... [详细]
  • Html5-Canvas实现简易的抽奖转盘效果
    本文介绍了如何使用Html5和Canvas标签来实现简易的抽奖转盘效果,同时使用了jQueryRotate.js旋转插件。文章中给出了主要的html和css代码,并展示了实现的基本效果。 ... [详细]
  • Voicewo在线语音识别转换jQuery插件的特点和示例
    本文介绍了一款名为Voicewo的在线语音识别转换jQuery插件,该插件具有快速、架构、风格、扩展和兼容等特点,适合在互联网应用中使用。同时还提供了一个快速示例供开发人员参考。 ... [详细]
  • Ihavethefollowingonhtml我在html上有以下内容<html><head><scriptsrc..3003_Tes ... [详细]
  • 【shell】网络处理:判断IP是否在网段、两个ip是否同网段、IP地址范围、网段包含关系
    本文介绍了使用shell脚本判断IP是否在同一网段、判断IP地址是否在某个范围内、计算IP地址范围、判断网段之间的包含关系的方法和原理。通过对IP和掩码进行与计算,可以判断两个IP是否在同一网段。同时,还提供了一段用于验证IP地址的正则表达式和判断特殊IP地址的方法。 ... [详细]
  • Commit1ced2a7433ea8937a1b260ea65d708f32ca7c95eintroduceda+Clonetraitboundtom ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • 展开全部下面的代码是创建一个立方体Thisexamplescreatesanddisplaysasimplebox.#Thefirstlineloadstheinit_disp ... [详细]
  • 不同优化算法的比较分析及实验验证
    本文介绍了神经网络优化中常用的优化方法,包括学习率调整和梯度估计修正,并通过实验验证了不同优化算法的效果。实验结果表明,Adam算法在综合考虑学习率调整和梯度估计修正方面表现较好。该研究对于优化神经网络的训练过程具有指导意义。 ... [详细]
  • 利用Visual Basic开发SAP接口程序初探的方法与原理
    本文介绍了利用Visual Basic开发SAP接口程序的方法与原理,以及SAP R/3系统的特点和二次开发平台ABAP的使用。通过程序接口自动读取SAP R/3的数据表或视图,在外部进行处理和利用水晶报表等工具生成符合中国人习惯的报表样式。具体介绍了RFC调用的原理和模型,并强调本文主要不讨论SAP R/3函数的开发,而是针对使用SAP的公司的非ABAP开发人员提供了初步的接口程序开发指导。 ... [详细]
  • 本文讨论了如何在codeigniter中识别来自angularjs的请求,并提供了两种方法的代码示例。作者尝试了$this->input->is_ajax_request()和自定义函数is_ajax(),但都没有成功。最后,作者展示了一个ajax请求的示例代码。 ... [详细]
  • iOS Swift中如何实现自动登录?
    本文介绍了在iOS Swift中如何实现自动登录的方法,包括使用故事板、SWRevealViewController等技术,以及解决用户注销后重新登录自动跳转到主页的问题。 ... [详细]
  • Todayatworksomeonetriedtoconvincemethat:今天在工作中有人试图说服我:{$obj->getTableInfo()}isfine ... [详细]
  • 本文介绍了ASP.NET Core MVC的入门及基础使用教程,根据微软的文档学习,建议阅读英文文档以便更好理解,微软的工具化使用方便且开发速度快。通过vs2017新建项目,可以创建一个基础的ASP.NET网站,也可以实现动态网站开发。ASP.NET MVC框架及其工具简化了开发过程,包括建立业务的数据模型和控制器等步骤。 ... [详细]
author-avatar
拍友2502914573
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有