html - 如何制作一个指令,在单击链接时将类“show”bootstrap 4 类添加到无序列表(不可见)?
问题描述
我被分配了一个任务,我必须在单击时打开引导程序 4 下拉菜单,方法是创建一个指令,在单击下拉菜单时将显示类添加到无序列表中(不允许引导程序 javascript cdn)
我做了一个名为“appDropdown”的指令,它将“show”类绑定到一个名为“isOpen”的布尔变量,然后我听一下点击,然后切换“isOpen”变量,因此每当我点击“show”类时都会得到在放置指令的元素处添加或删除。
HTML 代码
<div class="col-xs-12">
<div class="dropdown">
<button type="button" class="btn btn-primary dropdown-toggle" data-toggle="dropdown">Manage Recipe <span class="caret"></span>
</button>
<ul class="dropdown-menu" appDropdown> <!--this is where i need a class 'show' to be added when the above button is clicked !-->
<li class="dropdown-item"><a href="#">Add Ingredients to Shopping Lists</a></li>
<li class="dropdown-item"><a href="#">Edit recipe</a></li>
<li class="dropdown-item"><a href="#">Delete recipe</a></li>
</ul>
</div>
</div>
</div>
角码
import {Directive, HostListener, HostBinding,OnInit} from '@angular/core';
@Directive({
selector:'[appDropdown]'
})
export class appDropdown implements {
@HostBinding('class.show') isOpen:boolean=false;
@HostListener('click',['$event.target']) toggleOpen(target){
this.isOpen=!this.isOpen;
console.log(this.isOpen);
console.log(target)
}
预计在切换下拉按钮时会添加或删除类节目,但没有任何反应
解决方案
您可以exportAs
在指令中使用元属性来实现您想要的:
首先,定义一个指令
import { Directive, ElementRef, Input, HostBinding, HostListener } from "@angular/core";
@Directive({
selector: "[appDropdown]",
exportAs: "myDir"
})
export class DropDownDirective {
public isShow = false;
@HostBinding("class.show") get opened() {
return this.isShow;
}
@HostListener("click") open() {
this.isShow = !this.isShow;
}
}
然后在您的组件中定义一个ViewChild
访问按钮:
export class AppComponent implements AfterViewInit {
@ViewChild("temp", { static: true }) vc: DropDownDirective;
ngAfterViewInit() {
console.log(this.vc.isShow);
}
}
最后在你的 html 中:
<div class="dropdown">
<button #temp=myDir appDropdown type="button" class="btn btn-primary dropdown-toggle" data-toggle="dropdown">Manage Recipe <span class="caret"></span>
</button>
<ul class="dropdown-menu" [class.show]="this.vc.isShow">
<li class="dropdown-item"><a href="#">Add Ingredients to Shopping Lists</a></li>
<li class="dropdown-item"><a href="#">Edit recipe</a></li>
<li class="dropdown-item"><a href="#">Delete recipe</a></li>
</ul>
</div>
推荐阅读
- c# - 我如何能够在 C# 中的一维数组的二维数组中实例化多个对象
- ruby - 由于空指针异常,无法安装 ruby-runtime
- wordpress - 将 Ionic 3 中的下拉刷新功能与 Wordpress 集成
- reactjs - React 路由器不与 Redux 一起工作,不接收道具
- java - 为什么 OntClass 创建个体时行为不正常?
- google-maps - 确定线是否与谷歌地图上的其他线相交
- java - RxJava 在第一个 Completable 之后但在返回下一个单曲之前更新数据
- php - phpunit不可能按照安装过程进行
- mysql - 通过 bash 脚本导入 SQL 转储
- mysql - mysql:在同一列内比较后更改值