angular2 ng-bootstrap 下拉下拉组件
有人可以帮我找出如何将 angular2 组件与下拉列表绑定并调用打开或关闭方法..
他们没有太多的文档。
您可以使用 ViewChild 装饰器。在父组件中,它应该看起来像这样:
import 'ViewChild' from '@angular/core'
import 'NgbDropdown' from '...';
[...]
export class ParentComponent {
@ViewChild(NgbDropdown)
private dropdown: NgbDropdown;
closeDropdown() {
this.dropdown.close();
}
}
您可以在官方文档中阅读更多关于 ViewChild 的信息:组件交互 | 查看孩子。
实现这一点的最简单方法是使用NgbDropdown
指令的导出实例。可以按如下方式完成(注意#myDrop="ngbDropdown"
):
<div ngbDropdown #myDrop="ngbDropdown">
<button class="btn btn-outline-primary" id="dropdownMenu3" ngbDropdownToggle>Toggle</button>
<div class="dropdown-menu" aria-labelledby="dropdownMenu3">
<button class="dropdown-item">Action - 1</button>
<button class="dropdown-item">Another Action</button>
<button class="dropdown-item">Something else is here</button>
</div>
</div>
完成上述操作后,您可以在指令实例上调用记录在案的 ( https://ng-bootstrap.github.io/#/components/dropdown ) 方法。NgbDropdown
可用的方法有:open
、close
和。您可以按如下方式调用它们(例如从“外部”打开下拉菜单):toggle
isOpen
<button (click)="myDrop.open()">
HTML
<div ngbDropdown #myDrop="ngbDropdown">
<button class="btn btn-outline-primary" id="dropdownMenu3"
ngbDropdownToggle>Toggle</button>
<div class="dropdown-menu" aria-labelledby="dropdownMenu3">
<button class="dropdown-item" (click)="closeDropdown()">Close Dropdown</button>
</div>
</div>
角
确保导入 ViewChild 和 NgbDropdown
import { NgbDropdown } from '@ng-bootstrap/ng-bootstrap';
import { ViewChild } from '@angular/core';
@ViewChild('myDrop', { static: true }) myDrop: NgbDropdown;
closeDropdown() {
this.myDrop.close();
}
我尝试了上述方法,但它似乎没有做任何事情,所以我做了一些试验和错误,发现为什么当我打电话时myDrop.open()
什么也没发生。您必须将[autoClose]="false"
具有下拉引用的元素添加到您的元素中。
<div ngbDropdown #myDrop="ngbDropdown" [autoClose]="false">
<button class="btn btn-outline-primary" id="dropdownMenu3" ngbDropdownToggle>Toggle</button>
<div class="dropdown-menu" aria-labelledby="dropdownMenu3">
<button class="dropdown-item">Action - 1</button>
<button class="dropdown-item">Another Action</button>
<button class="dropdown-item">Something else is here</button>
</div>
</div
//Somewhere else
<button (click)="myDrop.open()"> // or pass the reference as a parameter to call it
in a function.
如果您需要将 ngbDropdown 实例传递给另一个组件,如上所述,将该实例定义为模板引用变量#myDrop="ngbDropdown"
,然后在要使用 Input 装饰器访问该下拉实例的组件上声明一个属性,例如
@Component({
selector: 'my-component',
template: `<button (click)=closeMyDrop()">Close myDrop</button>`
})
export class MyComponent {
@Input() myDrop;
closeMyDrop(){
this.myDrop.close();
}
}
然后在使用子组件的父组件中,定义myDrop
模板引用变量的属性,例如:
<my-component [myDrop]="myDrop"></my-component>