Angular Dropdown 指令不起作用 [英] Angular Dropdown directive doesn't work

查看:30
本文介绍了Angular Dropdown 指令不起作用的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我将 Angular 6.0.5 与 Bootstrap 4.1.1 一起使用,并添加了下拉指令.但我不能让它工作.我在这里看到了很多类似的问题,但没有一个是针对 Bootstrap 4 的.这是下拉 html:

<button type="button" class="btn btn-primary dropdown-toggle" data-toggle="dropdown">管理<span class="caret"></span></button><ul class="下拉菜单"><li><a class="dropdown-item" style="cursor: pointer"(click)="OnAddToShoppingList()">到购物清单</a></li><li><a class="dropdown-item" href="#">编辑食谱</a></li><li><a class="dropdown-item" href="#">删除食谱</a></li>

这是指令:

import {Directive, HostBinding, HostListener} from '@angular/core';@指示({选择器:'[appDropdown]'})导出类 DropdownDirective {@HostBinding('class.open') isOpen = false;@HostListener('click') toggleopen() {this.isOpen = !this.isOpen;}}

我怀疑开放"课程.我认为它是 Bootstrap 3 中弃用的类.那么 Bootstrap 4 中的替代品是什么?

解决方案

为了在 bootstrap 中进行下拉操作,您需要在两个地方添加 show class,您可以通过使用 angular template ref 获取对 isOpen 变量的引用来实现

如果你想获得指令的引用,你需要先导出指令

@Directive({选择器:'[appDropDown]',exportAs:'appDropDown'})

然后就可以使用模板的ref方法来实现下拉

我在此处包含示例:https://stackblitz.com/edit/angular-h9rgmn

I am using Angular 6.0.5 alongside with Bootstrap 4.1.1 and I added a directive for dropdowns. But I can't make it work in no way. I have seen a lot of similar problems here but none was for Bootstrap 4. this is the dropdown html:

<div class="btn-group" appDropdown>
  <button type="button" class="btn btn-primary dropdown-toggle" data-toggle="dropdown">
    Manage
    <span class="caret"></span></button>
  <ul class="dropdown-menu">
    <li><a class="dropdown-item" style="cursor: pointer"
           (click)="OnAddToShoppingList()">To Shopping List</a></li>
    <li><a class="dropdown-item" href="#">Edit Recipe</a></li>
    <li><a class="dropdown-item" href="#">Delete Recipe</a></li>
  </ul>
</div>

and this is the directive:

import {Directive, HostBinding, HostListener} from '@angular/core';

@Directive({
  selector: '[appDropdown]'
})
export class DropdownDirective {
  @HostBinding('class.open') isOpen = false;

  @HostListener('click') toggleopen() {
    this.isOpen = !this.isOpen;
  }
}

I suspected about the "open" class. and I think it was a depreacted class from Bootstrap 3. so what is alternative in Bootstrap 4?

解决方案

In order to work drop down in bootstrap you need to add show class in two places which you can achieve by get the reference to isOpen variable using angular template ref

If you want to get the reference to directives you need to export the directive first

@Directive({
  selector: '[appDropDown]',
exportAs:'appDropDown'
})

Then you can use the template ref method to achive dropdown

<div class="btn-group" appDropDown #r="appDropDown" >
  <button type="button" class="btn btn-primary dropdown-toggle" data-toggle="dropdown" >
    Manage
    <span class="caret"></span></button>
  <ul class="dropdown-menu" [ngClass]="{'show':r.isOpen}" >
    <li><a class="dropdown-item" style="cursor: pointer"
           >To Shopping List</a></li>
    <li><a class="dropdown-item" href="#">Edit Recipe</a></li>
    <li><a class="dropdown-item" href="#">Delete Recipe</a></li>
  </ul>
</div>

I have include example here check out: https://stackblitz.com/edit/angular-h9rgmn

这篇关于Angular Dropdown 指令不起作用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆