为了账号安全,请及时绑定邮箱和手机立即绑定

如何以角度从父组件触发 ngbDropdown 方法?

如何以角度从父组件触发 ngbDropdown 方法?

我NgbDropdown在我的角度应用程序中使用。我有两个组件CompParent和CompChild。compChild保存下拉列表的 HTML,它包含在CompParent中。当滚动事件发生时,我正在尝试关闭页面中所有打开的下拉菜单scrollable-div。comp-child.component.html:<div ngbDropdown container="body">  <button class="btn btn-outline-primary btn-sm" ngbDropdownToggle>Actions</button>  <div ngbDropdownMenu>    <button ngbDropdownItem>Edit</button>    <button ngbDropdownItem>Duplicate</button>    <button ngbDropdownItem>Move</button>    <div class="dropdown-divider"></div>    <button ngbDropdownItem>Delete</button>  </div></div>并且CompChild包含在CompParent 中,如下所示:comp-parent.component.html<div class="scrollable-div" (scroll)="closeAllDropdowns($event)">  <div class="dropdown-container" *ngFor="let item of items">    <app-comp-child></app-comp-child>  </div></div>到目前为止我尝试过的是:在compParent TS 中:export class compParentComponent{  @ViewChild(NgbDropdown) private readonly dropdown: NgbDropdown;  @HostListener('scroll', ['$event'])  closeAllDropdowns(event) {    this.dropdown.close();  }}但是this.dropdown返回undefined并说 close 方法不是与之关联的函数。我还尝试使用 templateRef 选择所有下拉菜单,但这也没有用。
查看完整描述

1 回答

?
凤凰求蛊

TA贡献1825条经验 获得超4个赞

@ViewChild并且@ViewChildren只能从组件本身查询元素,而不能从子组件中查询。可能的选择是在子项中公开引用下拉列表,在父项中引用子项。


家长:


export class CompParentComponent{

  @ViewChildren(CompChild) compChild!: QueryList<CompChild>;


  @HostListener('scroll', ['$event'])

  closeAllDropdowns(event) {

    this.compChild.forEach(dropdown => dropdown.close());

  }


}

孩子:


export class CompChildComponent{


  @ViewChild(NgbDropdown) public dropdown: NgbDropdown;


}


查看完整回答
反对 回复 2022-12-09
  • 1 回答
  • 0 关注
  • 90 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号