城市直播房产教育博客汽车
投稿投诉
汽车报价
买车新车
博客专栏
专题精品
教育留学
高考读书
房产家居
彩票视频
直播黑猫
投资微博
城市上海
政务旅游

Angular自定义指令Tooltip

2月6日 亡命徒投稿
  头条创作挑战赛
  本文同步本人掘金平台的文章:https:juejin。cnpost7082241253819023397
  一起养成写作习惯!这是我参与掘金日新计划4月更文挑战的第3天,点击查看活动详情。
  Yeah,关注我的读者应该知道,上一篇文章了解Angular开发的内容,我们已经概览了Angular的相关内容。在自定义指令的部分,我们已经能够实现编写,但是,在实际场景中,我们还需要标准化的管理。
  Angular是Angular。js的升版
  So,本文,我们就以Tooltip来讲解下自定义指令的内容。
  线上效果图,如下:
  目录结构
  在上一篇文章的实现的代码项目基础上,执行命令行:进入directives文件夹cddirectives创建tooltip文件夹mkdirtooltip进入tooltip文件夹cdtooltip创建tooltip组件nggeneratecomponenttooltip创建tooltip指令nggeneratedirectivetooltip复制代码
  执行完上面的命令行之后,你会得到appdirectivetooltip的文件目录结构如下:tooltiptooltiptooltip组件userlist。component。html页面骨架userlist。component。scss页面独有样式userlist。component。spec。ts测试文件userlist。component。tsjavascript文件tooltip。directive。spec。ts测试文件tooltip。directive。ts指令文件复制代码
  嗯,这里我将组件放在tooltip的同级,主要是方便管理。当然,这个因人而异,你可以放在公共组件components文件夹内。编写tooltip组件
  在html文件中,有:{{data。content}}复制代码
  在样式文件。scss中,有:black:000000;white:caretsize:6tooltipbg:transparentize(black,0。25);transparentize是sass的语法gridgutterwidth:30bodybgcolor:appanimtime:200appanimcurve:stdborderradius:5zindexmax:100;:host伪类选择器,给组件元素本身设置样式:host{position:padding:gridgutterwidth3gridgutterwidth2;backgroundcolor:color:opacity:0;transition:textalign:borderradius:zindex:}。caret{脱字符width:0;height:0;borderleft:6borderright:6borderbottom:6position:top:left:50;marginleft:caretsize2;borderbottomcolor:}复制代码
  嗯~,css是一个神奇的东西,之后会安排一篇文章来讲解下sass相关的内容。。。
  然后,在javascript文件tooltip。component。ts内容如下:import{Component,ElementRef,元素指向HostBinding,OnDestroy,OnInit}Component({selector:apptooltip,标识符,表明我这个组件叫做啥,这里是apptooltiptemplateUrl:。tooltip。component。html,本组件的骨架styleUrls:〔。tooltip。component。scss〕本组件的私有样式})exportclassTooltipComponentimplementsOnInit{publicdata:在directive上赋值privatedisplayTimeOut:组件本身host绑定相关的装饰器HostBinding(style。top)hostStyleTop!:HostBinding(style。left)hostStyleLeft!:HostBinding(style。opacity)hostStyleOpacity!:constructor(privateelementRef:ElementRef){}ngOnInit():void{this。hostStyleTopthis。data。elementPosition。if(this。displayTimeOut){clearTimeout(this。displayTimeOut)}this。displayTimeOutsetTimeout((:any){这里计算tooltip距离左侧的距离,这里计算公式是:tooltip。left目标元素的。width(tooltip。width2)this。hostStyleLeftthis。data。elementPosition。leftthis。data。element。clientWidth2this。elementRef。nativeElement。clientWidth2pxthis。hostStyleOpacity1;this。hostStyleTopthis。data。elementPosition。bottom10px},500)}组件销毁ngOnDestroy(){组件销毁后,清除定时器,防止内存泄露if(this。displayTimeOut){clearTimeout(this。displayTimeOut)}}}复制代码编写tooltip指令
  这是本文的重点,具体的说明,我在代码上标注出来~
  相关的文件tooltip。directive。ts内容如下:import{ApplicationRef,全局性调用检测ComponentFactoryResolver,创建组件对象ComponentRef,组件实例的关联和指引,指向ComponentFactory创建的元素Directive,ElementRef,EmbeddedViewRef,EmbeddedViewRef继承于ViewRef,用于表示模板元素中定义的UI元素。HostListener,DOM事件监听Injector,依赖注入Input}import{TooltipComponent}from。tooltiptooltip。Directive({selector:〔appTooltip〕})exportclassTooltipDirective{Input(appTooltip)appTooltip!:privatecomponentRef!:ComponentRefTooltipC获取目标元素的相关位置,比如left,right,top,bottomgetelementPosition(){returnthis。elementRef。nativeElement。getBoundingClientRect();}constructor(protectedelementRef:ElementRef,protectedappRef:ApplicationRef,protectedcomponentFactoryResolver:ComponentFactoryResolver,protectedinjector:Injector){}创建tooltipprotectedcreateTooltip(){this。componentRefthis。componentFactoryResolver。resolveComponentFactory(TooltipComponent)绑定tooltip组件。create(this。injector);this。componentRef。instance。data{绑定data数据content:this。appTooltip,element:this。elementRef。nativeElement,elementPosition:this。elementPosition}this。appRef。attachView(this。componentRef。hostView);添加视图constdomElem(this。componentRef。hostViewasEmbeddedViewRef)。rootNodes〔0〕asHTMLEdocument。body。appendChild(domElem);}删除tooltipprotecteddestroyTooltip(){if(this。componentRef){this。appRef。detachView(this。componentRef。hostView);移除视图this。componentRef。destroy();}}监听鼠标移入HostListener(mouseover)OnEnter(){this。createTooltip();}监听鼠标移出HostListener(mouseout)OnOut(){this。destroyTooltip();}}复制代码
  到这里,已经完成了99的功能了,下面我们在页面上调用即可。页面上调用
  我们在userlist。component。html上添加下面的内容:pstylemargintop:100!〔appTooltip〕HelloJimmy是重点span〔appTooltip〕HelloJimmystylemarginleft:200width:160textalign:padding:20px0;display:border:1pxsolid999;Jimmyspan复制代码
  TooltipDirective这个指令我们已经在app。module。ts上进行声明,我们直接调用即可。目前的效果如下:
  我们实现的tooltip是底部居中展示,也就是我们平常使用框架,比如angularantdesign中tooltip的bottom属性。对于其他属性,读者感兴趣的话,可以进行扩展。
  至此,我们可以很好的维护自己编写的指令文件了。
  【完】
投诉 评论 转载

叔本华把自己放在心上世界就是你自己世界就是你自己,这个真理适用于生活中的所有人。当你懂得这个道理后,你就会意识到,你不认识什么太阳、地球,而永远只承认自己的双眼和双手,因为太阳为眼睛所见,地……1976年毛主席逝世后,远在加拿大的张国焘,面对记者说了10在1938年4月,张国焘寻到机会,毅然离开了延安,至此脱离了中共。他这件事情做得非常机密,就连妻子都丝毫不知情,他心里的感受,也恐怕只有他自己才能懂;他的下场,自然也是凄……衡量个人成熟度的四个指标我们经常会说一个人够不够成熟、火候深不深,但到底怎样才算是够成熟、有火候呢?这是一个相当难以评量的问题,因为成熟、火候只能以意会,而没有数字化的指针可以衡量,不像身高、体重一量……有哪些淡化黑眼圈的眼霜可以推荐?谢谢题主的邀请。柚子除了会推荐几款可以有效淡化黑眼圈的眼霜,还是劝你,赶快不要熬夜,立地成佛熬着夜,用着那么贵的护肤品何必呢一定要按时睡觉,每天早晨都要元气满满的黑眼圈不仅很难……干保险,真不如干外卖?干保险,真不如干外卖?从目前来说,似乎确实如此,这也是我国保险业发展的悲哀!有人说这两个行业没有可比性,其实,真的有可比性!从专业角度来说,一些外卖员其实是很……新春造句用新春造句大全(31)这一年,我们一起吃饭一起2,一起打闹一起笑,一起加班一起发牢骚,一起拼搏一起犒劳,一起取笑老板一起被骂挨批。新春佳节来到,愿你快乐逍遥!(32)人类不断地以欢乐的……罗定人民医院百名医护人员为爱挽臂近日,罗定市人民医院举行干部职工无偿献血活动。号召之下,全院110名医护工作者参与,累计献血超3万毫升。一大早,在医院门诊五楼多功能厅,来参加献血的医护人员早已有序排好了……阿根廷世界杯夺冠冲上热搜这说明了什么?头条创作挑战赛一、专家全网跑、建议满天飞说明了什么?说明民众对全面放开后,可能会给自己带来的伤害恐慌已经超过了政府预期,所有人的内心并不是像嘴上说的那样,不担心,不……常委会造句用常委会造句大全31、全国人大常委会副委员长韩启德出席会议开幕式,并宣布中国南南卫生合作研究联盟正式成立。32、8月18日,长沙市人大常委会召开旅游业发展情况专题调研汇报会。33、……Angular自定义指令Tooltip头条创作挑战赛本文同步本人掘金平台的文章:https:juejin。cnpost7082241253819023397一起养成写作习惯!这是我参与掘金日新计划4月更……魔兽世界怀旧服防战最好武器是风剑吗?有何依据?魔兽世界防战战士是魔兽世界60年代唯一MT,并不是说其他两个坦克太菜,而是防战实在太优秀,但是防战仍然有弱点,反而防战的短板特别明显,那就是群拉。所以60年代防战最好的武……长不长寿,不仅看基因,还要看饭后养生8法很多人吃完饭,特别是晚餐后,就坐在沙发上看电视、看手机、聊天等。更有人晕饭,吃完饭后就躺在床上睡一觉。饭后做这些事确实让人舒适,但却让健康大打折扣,日积月累,疾病就会找上门。……
产品与运营不同的思路解析方脸女生瘦脸秘诀直发造型最好的选择专攻造句用专攻造句大全春吃甜来,秋吃酸,建议秋天常吃这5酸,润燥身体棒多元课堂背景下新能源汽车专业教学模式研究梵克雅宝宝石裂了小孩胃肠炎怎么保养电脑上安装安卓系统的方法宗人府内务府詹事府都是分别负责干嘛的这三府有什么节日聚会注意事项有哪些唱歌谨记点最美大学生湖南农业大学2018级博士生杨泰河南村镇银行风险处置方案近期公布河南村镇银行案后续最新消息心理咨询有什么作用?为何国产旗舰手机不用直面屏?成熟的女人一定要有这三颗心小学运动会作文600字合集6篇《跻春台》的主要内容是什么赏析一川烟草梦华录剧情讲的是什么,梦华录的故事真实存在吗女人当自强600字作文盘点中国足球最有天赋的球员董方卓血液的秘密能让你变成超人初中生安全教育说课稿大基金二期必投名单!

友情链接:中准网聚热点快百科快传网快生活快软网快好知文好找