前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >angularJS学习之路(十七)---自定义指令

angularJS学习之路(十七)---自定义指令

作者头像
wust小吴
发布于 2019-07-08 08:35:07
发布于 2019-07-08 08:35:07
7650
举报
文章被收录于专栏:风吹杨柳风吹杨柳

指令简单理解  就是   在元素上运行的函数    (这个函数有个名称,或者叫属性,比如id 等这种形式)

或者说  扩展这个元素的功能    

原来的HTML 元素  比如 input  就只是一个输入框   如果我们在这个元素上加入 指令,就可以扩展这个元素的功能了

比如说:ng-click 可以让一个元素能够监听click事件,并在接收到事件的时候执行angularJS表达式

例如:上面的input 输入框,有ng-change 指令,它可以动态监听input的值是否发生变化

定义指令:使用  directive()方法 接收两个参数:

1.name  字符串,指令的 名称   简单理解就是给某个元素添加了一个新的属性

2.factory_function 函数 

在这个函数里面  一般返回一个对象,函数里面定义了这个指令的全部行为,

angular.module('myApp',[])

.directive('myDirective',function(){

//一个指令  定义对象  这个对象的名称 就是第一个参数  name 这里就是:myDirective

return {

//通过设置项进行定义指令   最佳的方式

//或者返回一个函数,来代替定义指令   这个函数称为   连接传递函数 postLink  简单指令用的比较多

};

});

注意事项:自己定义的指令一般  有 my作为前缀,或者用项目名也比较合适,不要使用ng开头,避免冲突

指令的工厂函数只会在编译器第一次匹配到这个指令的时候调用一次,

知识点回顾:javascript对象由 键和值组成   。当一个给定的键的值被设置为  一个字符串,布尔值,数字,数组或者对象时,我们把这个键称为属性,当把键设置为函数时,我们把它叫做方法

可能的选项如下:

angular.module('myApp',[])

.directive('myDirective',function(){

//一个指令  定义对象  这个对象的名称 就是第一个参数  name 这里就是:myDirective

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(){},

post:function(){}

// or

return function postLink(){}

}

};

});

各个选项的意义:

restrict:String 字符串,可选参数,它表示这个指令在DOM中是以何种形式被声明 默认是A 

E 代表元素的意思    作用形如:<myDirective></myDirective>  将一些功能封装在元素的内部

A 代表属性的意思 作用形如:<div myDirective=""></div> 给一个已经存在的元素添加   数据或者行为

C 代表类名的意思 作用形如:<div class="myDirective:xx"></div>

M 代表注释的意思 作用形如:<--directive:myDirective -->   这是少用

上面的各个选项 可以单独使用,也可以混合使用 比如'EA'

优先级:priority:Number 数值型

 大多数忽略这个函数,默认是 0 ,当需求需要的时候,这个指令非常的用,

作用:比如:使得某个元素在  同一级别的元素上,总是在其他指令之前被调用 

terminal:Boolean,布尔型

作用:让angularJS停止在 当前元素  上比   本定义的指令  优先级 低 的所有  指令,相同优先级的指令还会执行

可以参考:ngView 和 ngif

template:String or Template Function:function(tElement,tAttrs){}, 字符串或者函数

字符串:一段 Html文本

函数:可以接受两个参数的函数,参数为:tElement,tAttrs 返回值是:代表模板的字符串

参数中:tElement,tAttrs 的t代表 template 是相对于 instance 的

作用:就是将多个DOM元素封装在一起

如果模板字符串中含有多个DOM元素,或者只有一个单独的文本节点构成,那他必须被包含在一个父元素内部

换句话说  必须存在一个跟DOM元素

举个例子:

        <script type="text/javascript">             var myAppModule = angular.module("myApp",[]);             myAppModule.directive("xingoo",function(){                 return {                     restrict:'AE',                     template:'<div><input type="text" ng-model="username"/>{{username}}</div><br>',                     repalce:true                 }             })         </script>

注意template 返回模板字符串的时候,如果有多行的话,需要在每行后面加上反斜线   或者使用 <br>+的形式

由于多行维护和阅读都非常的困难,所以这个方案不被大量使用,简单的时候就这样用,但是复制的情况下建议使用

templateUrl

这里面的难点在于  模板 中作用域的问题

templateUrl:String,字符串【也可以是函数】

字符串:代表外部HTML文件路径的字符串 一般通过ajax 请求HTML模板文件

【函数:一个可以接收两个参数的函数,返回的是一个外部HTML文件的路径的字符串】

麻烦的问题:一般选择从  服务器文件系统中加载HTML模板,这个加载的过程是异步的,编译和链接需要暂停,等待模板加载完成,严重拖慢客户端应用速度,

解决方法:在部署之前对HTML模板进行缓存   这是一个非常好的选择  放在一个定义模板的javascript文件中

replace:Boolean or String,布尔型

如果设置了这个参数,值必须是true,因为默认是false   

默认的意思是   :模板会被当作  子元素  插入到 调用此指令的元素内容   意思就是添加了一个子元素

scope:Boolean or Object,布尔型或者对象

参数可选,可以被设置为true  默认是false  或者设置为一个对象

作用:当设置为true时候,会从父作用域继承并创建一个新的作用域  新的作用域代表了什么意思,代表了它是独立的

关于这点 下篇文章详细讲解

transclude:Boolean 布尔型

参数可选,可以被设置为true  默认是false  

作用:嵌入   创造可复用的组件   或者叫  创建一个可以复用的指令

详细说:可以将整个模板包括其中的指令 嵌入  另外一个 指令中

实现的目的就是:指令的内部可以访问外部指令的作用域

这个时候有个前提条件就是:scope选项必须是通过{}或者true设置成隔离作用域(独立作用域)

controller:String or function(scope,element,attrs,transclude,otherInjectables){},

字符串或者函数

字符串:当设置为字符串时 会以字符串的值为名字来查找注册在应用中的控制器的构造函数

作用是:将一些特殊的服务注入到本指令中

函数:

function(scope,element,attrs,transclude,otherInjectables)

scope:与指令元素相关的当前的作用域   被注入到指令中

element 当前指令对应的元素

attrs 当前元素  属性 组成的对象  比如id class 等,是键值对的形式

transclude 嵌入连接函数

controllerAs:String

参数设置控制器别名  

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2015年11月23日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
AngularJS入门心得4——漫谈指令scope
  上篇《AngularJS入门心得3——HTML的左右手指令》初步介绍了指令的概念和作用。已经和指令打过一个照面,就不会那么陌生了,今天主要介绍的是一个困扰了我很久终于想通的问题,这个问题与scope有关,可以看做是《AngularJS入门心得1——directive和controller如何通信》在scope上的补充和延伸。    小时候,老师就教会了我们盲人摸象这个成语,教导我们认识事物不能片面,缺少对于一个事物全局的认知。所以,说到指令,它的一个完整结构如下: angular.module('myA
JackieZheng
2018/01/16
2.1K0
AngularJS入门心得4——漫谈指令scope
angularjs 指令详解
一、指令定义 对于指令,可以把它简单的理解成在特定DOM元素上运行的函数,指令可以扩展这个元素的功能。 首先来看个完整的参数示例再来详细的介绍各个参数的作用及用法: <div my-directive></div> 二、指令参数的作用和意义(这个地方只选常用的几种来讲一下) restrict[string] restrict是一个可选的参数。用于指定该指令在DOM中以何种形式被声明。默认值是A,即以属性的形式来进行声明。 可选值如下: E(元素) <my-directive></my-directive
柴小智
2018/04/10
2.4K0
angularjs 指令详解
angularjs directive学习心得
transclude有三个选项,true, false, 和object.如果不显示指明的话,默认为false. 当为false的时候,则那个directive里面的指令不会嵌入到你写的模板里,举个例子 下面是html代码
嘿嘿嘿
2018/09/10
1.1K0
angularjs directive学习心得
AngularJs指令解密
指令定义 在《AngularJs权威教程》中,指令可以简单理解成特定的DOM元素上运行的函数;我认为还可以理解成将将自定义的HTML标签解析成原始的标签,然后为其加入一些扩展的功能(函数). angularjs 提供了一个强大的扩展系统,通过指令机制,我们可以通过自定义指令来扩展自己的指令系统。 在AngularJS的核心里,指令可以绑定元素的属性(例如可见性,class列表,内部文本,内部HTML或者值)到scope的属性或表达式。最值得注意的是,一旦监测到scope中的变化被标记,这些绑定就会被更新。
双愚
2018/07/17
2.4K0
4、Angular JS 学习笔记 – 创建自定义指令 [翻译中]
注意:本指南是针对已经熟悉AngularJS基础的开发者。如果您只是想要开始,建议您先去看教程。如果你在寻找指令的API,我们最近把他移动到$compile
前Thoughtworks-杨焱
2021/12/08
5K0
AngularJS 1 教程
随着浏览器性能提升,更多Web Page演变为Web App,特别是在中大型的项目中,就需要一个 前端框架 来:
小刀c
2022/08/16
4.8K0
带你走近AngularJS - 创建自定义指令
带你走近AngularJS系列: 带你走近AngularJS - 基本功能介绍 带你走近AngularJS - 体验指令实例 带你走近AngularJS - 创建自定义指令 ------------------------------------------------------------------------------------------------ 为什么使用AngularJS 指令? 使用过 AngularJS 的朋友应该最感兴趣的是它的指令。现今市场上的前端框架也只有AngularJS
葡萄城控件
2018/01/10
2.7K0
带你走近AngularJS - 创建自定义指令
Angular Directive 详解
如上所示,return的对象中会有很多的属性,这行属性都是用来定义directive的。
西南_张家辉
2021/02/02
2.8K0
2-进军 angular1.x 表达式和指令
使用驼峰法来命名一个指令, runoobDirective, 但在使用它时需要以 - 分割, runoob-directive:
西南_张家辉
2021/02/02
2.6K0
angularJS学习之路(三十)---自定义指令---templateUrl
不过这里因为js目录是当前的目录,你的html目录肯定在另外一个文件夹里,所以自己记得路径的问题
wust小吴
2019/07/08
5780
第216天:Angular---自定义指令(二)
自定义指令 1、第一个参数是指令的名字,第二个参数任然应该使用一个数组,数组的最后一个元素是一个函数。定义指令的名字,应该使用驼峰命名法 1 <!DOCTYPE html> 2 <html lang="en"> 3 4 <head> 5 <meta charset="UTF-8"> 6 <title>Document</title> 7 <link rel="stylesheet" href="bower_components/bootstrap/dist/css/bootstr
半指温柔乐
2018/09/11
4780
【AngularJS】—— 8 自定义指令
AngularJS支持用户自定义标签属性,在不需要使用DOM节点操作的情况下,添加自定义的内容。 前面提到AngularJS的四大特性:   1 MVC   2 模块化   3 指令   4 双向数据绑定 下面将会介绍如下的内容: 1 如何自定义指令   2 自定义指令的使用   3 自定义指令的内嵌使用   如何自定义指令:   Angular是基于模块的框架,因此上来肯定要创建一个自己的模块: var myAppModule = angular.module("myApp",[
用户1154259
2018/01/17
8840
【AngularJS】—— 8 自定义指令
angularJS学习之路(十九)---自定义指令关于独立作用域
1.首先关于  scope:{} 和scope:true 效果是一样的 <!DOCTYPE html> <html ng-app="myApp"> <head> <meta charset="utf-8"> <title></title> </head> <body> <div ng-init="myProperty = 'wow, this is cool'"></div> Surrounding scope: {{ myProperty }} <div myInherit
wust小吴
2019/07/08
5030
AnagularJs之directive
  假如我们发现要写很多公共或是重用的dom、class、attr属性或是需要操作scope作用域,就要考虑代码最好不要copy、不要出现重复的代码段,好像是哪位大牛说的话,具体记不清了,反正就是为了性能优化等方面。
用户5640963
2019/07/26
1.2K0
【AngularJS】—— 10 指令的复用
前面练习了如何自定义指令,这里练习一下指令在不同的控制器中如何复用。   —— 来自《慕课网 指令3》   首先看一下一个小例子,通过自定义指令,捕获鼠标事件,并触发控制器中的方法。   单个控制器的标签指令   依然是先创建一个模块 var myAppModule = angular.module("myApp",[]);   在模块的基础上,创建控制器和指令 myAppModule.controller("myAppCtrl",["$scope",function($scop
用户1154259
2018/01/17
7740
【AngularJS】—— 10 指令的复用
带你走近AngularJS - 体验指令实例
带你走近AngularJS系列: 带你走近AngularJS - 基本功能介绍 带你走近AngularJS - 体验指令实例 带你走近AngularJS - 创建自定义指令 ------------------------------------------------------------------------------------------------ 之前我们已经介绍了所有的AngularJS 基础知识,下面让我们通过实例来加深记忆,体验自定义指令的乐趣。 手风琴指令 我们展示的第一个例子是手
葡萄城控件
2018/01/10
2.8K0
带你走近AngularJS - 体验指令实例
AngularJS 的 API:模块 API、指令 API、服务 API、过滤器 API、路由 API
AngularJS 是一款流行的前端 JavaScript 框架,提供了丰富的 API 接口,用于实现前端应用的各种功能。本文将详细介绍 AngularJS 的 API,包括模块 API、指令 API、服务 API、过滤器 API、路由 API 等内容,帮助开发者充分了解和熟练运用 AngularJS 的各项功能。
网络技术联盟站
2023/07/05
5930
【AngularJS】—— 12 独立作用域
前面通过视频学习了解了指令的概念,这里学习一下指令中的作用域的相关内容。 通过独立作用域的不同绑定,可以实现更具适应性的自定义标签。借由不同的绑定规则绑定属性,从而定义出符合更多应用场景的标签。 本篇将会总结下面的内容:   1 为何需要独立作用域   2 如何实现独立作用域   3 作用域的数据绑定 之前有一些错误,是由于replace拼写错误导致的。 拼写正确后,网友发现报错,无法正常工作。这是因为模板中存在单标签<br>,导致模板无法正确解析~ 再次感谢博友们提出的错误! 独立作
用户1154259
2018/01/17
1.5K0
【AngularJS】—— 12 独立作用域
angularjs学习第六天笔记(指令简介学习)
  您好,由于周末有事情,没哟学习angularjs,几天晚上开始继续学习angularjs,坚持加油每一天。谢谢
小小许
2018/08/30
5530
angularjs学习第六天笔记(指令简介学习)
【AngularJS】 # AngularJS入门
ng-app 指令定义一个 AngularJS 应用程序。 若不声明,将直接显示表达式。
全栈程序员站长
2022/09/15
24.3K0
【AngularJS】 # AngularJS入门
相关推荐
AngularJS入门心得4——漫谈指令scope
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档