使用AngularJS2中的指令实现按钮的切换效果

发布时间 - 2026-01-11 00:22:40    点击率:

 

之前在AngularJS2中一种button切换效果的实现(二)中实现了按钮的切换效果,但是方法比较low,这次我们使用Angular2的指令来实现。

指令实现hover效果

import { Directive, ElementRef, HostListener, Input } from '@angular/core';
@Directive({
 selector: '[myHighlight]'
})
export class HighlightDirective {
 constructor(private el: ElementRef) { }
 @HostListener('mouseenter') onMouseEnter() {
 this.highlight('red');
 }
 @HostListener('mouseleave') onMouseLeave() {
 this.highlight(null);
 }
 private highlight(color: string) {
 this.el.nativeElement.style.backgroundColor = color;
 }
}
<button myHighlight class="btn">按钮一</button>
<button myHighlight class="btn">按钮二</button>
<button myHighlight class="btn">按钮三</button>
.btn{
 height: 50px;
 width: 100px;
 background-color: #3399ff;
 color: white;
 border: 0;
 outline: 0;
 cursor: hand;
}

hover的效果直接参考Angular官网的代码。

 

指令实现click效果

import { Directive, ElementRef, HostListener, Input } from '@angular/core';
@Directive({
 selector: '[myHighlight]'
})
export class HighlightDirective {
 constructor(private el: ElementRef) { }
 @HostListener('click') onMouseClick() {
 this.clickhighlight("black");
 }
 private clickhighlight(color: string) {
 let obj = this.el.nativeElement;
 let btns = obj.parentNode.children;
 //背景色全部重置
 for(let i=0; i<btns.length; i++){
 btns[i].style.backgroundColor = "#3399ff";
 }
 //设置当前点击对象的背景色
 obj.style.backgroundColor = color;
 }
}
<div>
<button myHighlight class="btn">按钮一</button>
<button myHighlight class="btn">按钮二</button>
<button myHighlight class="btn">按钮三</button>
</div>
.btn{
 height: 50px;
 width: 100px;
 background-color: #3399ff;
 color: white;
 border: 0;
 outline: 0;
 cursor: hand;
}

click效果仍然用@HostListener装饰器引用属性型指令的宿主元素,首先把所有button的背景颜色重置,然后再设置当前点击对象的背景颜色,这样就达到了点击后背景颜色变化的效果。

 

指令实现click加hover效果

import { Directive, ElementRef, HostListener, Input } from '@angular/core';
@Directive({
 selector: '[myHighlight]'
})
export class HighlightDirective {
 constructor(private el: ElementRef) { }
 @HostListener('click') onMouseClick() {
 this.clickhighlight("black");
 }
 private clickhighlight(color: string) {
 let obj = this.el.nativeElement;
 let btns = obj.parentNode.children;
 //背景色全部重置
 for(let i=0; i<btns.length; i++){
 btns[i].style.backgroundColor = "#3399ff";
 }
 //设置当前点击对象的背景色
 obj.style.backgroundColor = color;
 }
}
<div>
<button myHighlight class="btn">按钮一</button>
<button myHighlight class="btn">按钮二</button>
<button myHighlight class="btn">按钮三</button>
</div>
.btn{
 height: 50px;
 width: 100px;
 background-color: #3399ff;
 color: white;
 border: 0;
 outline: 0;
 cursor: hand;
}
.btn:hover{
 background: black !important;
}

配合上文click效果,只要加上一行css代码就可以实现click和hover的组合效果,此处务必使用hover伪类,并用!important来提升样式的优先级,如果用@HostListener装饰器,mouseenter、mouseleave、click三者会打架:

 

以上所述是小编给大家介绍的使用AngularJS2中的指令实现按钮的切换效果,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!


# angularjs  # 指令  # angularjs按钮切换  # AngularJS实现动态切换样式的方法分析  # AngularJS标签页tab选项卡切换功能经典实例详解  # 详解AngularJS ng-class样式切换  # angularJs的ng-class切换class  # AngularJS路由切换实现方法分析  # AngularJS实现使用路由切换视图的方法  # AngularJS入门教程之多视图切换用法示例  # 用AngularJS的指令实现tabs切换效果  # 使用AngularJS实现可伸缩的页面切换的方法  # angularjs实现Tab栏切换效果  # 背景色  # 小编  # 在此  # 给大家  # 然后再  # 来实现  # 所述  # 给我留言  # 官网  # 感谢大家  # 就可以  # 就达  # 疑问请  # 有任何  # 实现了  # HighlightDirective  # export  # core  # selector  # Input 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 如何用wdcp快速搭建高效网站?  JavaScript常见的五种数组去重的方式  Laravel API路由如何设计_Laravel构建RESTful API的路由最佳实践  Laravel Eloquent模型如何创建_Laravel ORM基础之Model创建与使用教程  如何在腾讯云免费申请建站?  如何自定义建站之星网站的导航菜单样式?  高防服务器租用如何选择配置与防御等级?  如何自定义safari浏览器工具栏?个性化设置safari浏览器界面教程【技巧】  网站制作免费,什么网站能看正片电影?  焦点电影公司作品,电影焦点结局是什么?  JavaScript Ajax实现异步通信  美食网站链接制作教程视频,哪个教做美食的网站比较专业点?  HTML5空格在Angular项目里怎么处理_Angular中空格的渲染问题【详解】  Laravel如何使用Eloquent ORM进行数据库操作?(CRUD示例)  Laravel如何实现邮件验证激活账户_Laravel内置MustVerifyEmail接口配置【步骤】  消息称 OpenAI 正研发的神秘硬件设备或为智能笔,富士康代工  利用 Google AI 进行 YouTube 视频 SEO 描述优化  Laravel如何使用Gate和Policy进行权限控制_Laravel权限判定与策略规则配置  Laravel怎么使用Session存储数据_Laravel会话管理与自定义驱动配置【详解】  利用python获取某年中每个月的第一天和最后一天  开心动漫网站制作软件下载,十分开心动画为何停播?  如何在阿里云虚拟主机上快速搭建个人网站?  Laravel如何生成PDF或Excel文件_Laravel文档导出工具与使用教程  如何用5美元大硬盘VPS安全高效搭建个人网站?  如何在七牛云存储上搭建网站并设置自定义域名?  JS中对数组元素进行增删改移的方法总结  Laravel怎么实现支付功能_Laravel集成支付宝微信支付  Claude怎样写结构化提示词_Claude结构化提示词写法【教程】  如何在服务器上配置二级域名建站?  Laravel怎么使用artisan命令缓存配置和视图  微信小程序 scroll-view组件实现列表页实例代码  Laravel如何使用软删除(Soft Deletes)功能_Eloquent软删除与数据恢复方法  Laravel如何生成URL和重定向?(路由助手函数)  Laravel如何处理CORS跨域问题_Laravel项目CORS配置与解决方案  Laravel用户密码怎么加密_Laravel Hash门面使用教程  如何在阿里云服务器自主搭建网站?  如何快速上传建站程序避免常见错误?  如何挑选优质建站一级代理提升网站排名?  哪家制作企业网站好,开办像阿里巴巴那样的网络公司和网站要怎么做?  如何在景安服务器上快速搭建个人网站?  长沙企业网站制作哪家好,长沙水业集团官方网站?  Laravel如何实现用户角色和权限系统_Laravel角色权限管理机制  如何在 Python 中将列表项按字母顺序编号(a.、b.、c. …)  Laravel模型关联查询教程_Laravel Eloquent一对多关联写法  Laravel如何使用Socialite实现第三方登录?(微信/GitHub示例)  Laravel如何实现登录错误次数限制_Laravel自带LoginThrottles限流配置【方法】  如何在腾讯云服务器快速搭建个人网站?  关于BootStrap modal 在IOS9中不能弹出的解决方法(IOS 9 bootstrap modal ios 9 noticework)  如何在阿里云虚拟服务器快速搭建网站?  广州网站制作公司哪家好一点,广州欧莱雅百库网络科技有限公司官网?