- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用 ElementRef 来关注输入。除了在 ng-bootstrap 库的下拉列表中,这工作正常。如何在 ngbDropdown 中触发事件?
示例:https://stackblitz.com/edit/angular-z7q9xm
组件类
import { Component, ViewChild, ElementRef } from '@angular/core';
@Component({
selector: 'ngbd-dropdown-basic',
templateUrl: './dropdown-basic.html'
})
export class NgbdDropdownBasic {
@ViewChild("search") searchField: ElementRef;
@ViewChild("searchOutside") searchFieldOutside: ElementRef;
onToggle(dropDownOpen: boolean) {
if (dropDownOpen) {
this.searchField.nativeElement.focus();
}
}
focusOtherField() {
this.searchFieldOutside.nativeElement.focus();
}
}
组件模板
<div class="row">
<div class="col"><h3>Example 1: Inside dropdown <br>(not working)</h3></div>
</div>
<div class="row form-group">
<div class="col">
<div ngbDropdown (openChange)="onToggle($event)" class="d-inline-block">
<button class="btn btn-outline-primary" id="dropdownBasic1" ngbDropdownToggle>Toggle dropdown</button>
<div ngbDropdownMenu aria-labelledby="dropdownBasic1">
<div class="p-2"><input #search name="search" class="form-control" placeholder="Search..."></div>
</div>
</div>
</div>
</div>
<hr>
<div class="row">
<div class="col"><h3>Example 2: Outside dropdown</h3></div>
</div>
<div class="row form-group">
<div class="col-auto"><button (click)="focusOtherField()" type="button" class="btn btn-outline-primary">Focus this field:</button></div>
<div class="col">
<input #searchOutside name="searchOutside" class="form-control" placeholder="Search...">
</div>
</div>
最佳答案
问题是在单击下拉菜单并调用 onToggle
时,DOM 尚未更新以呈现下拉菜单和下拉菜单中的输入。
您可以做的是通过构造函数将 ChangeDetectorRef
注入(inject)到组件中:
import { ChangeDetectorRef } from '@angular/core';
...
export class NgbdDropdownBasic {
...
constructor(private _cdRef: ChangeDetectorRef) {}
并调用 this._cdRef.detectChanges();
,然后再关注 onToggle
方法中的输入:
onToggle(dropDownOpen: boolean) {
if (dropDownOpen) {
this._cdRef.detectChanges();
this.searchField.nativeElement.focus();
}
}
这将导致呈现下拉菜单和输入,因此当您调用 this.searchField.nativeElement.focus();
时,它已经可见并且将获得焦点。
请参阅this StackBlitz用于工作演示。
关于Angular:如何将输入集中在 ngbDropdown 菜单中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61070275/
我想在我的导航栏中有一个登录下拉菜单。但是,只要单击登录表单中的某些内容,下拉菜单就会关闭。 另一个问题:如何使下拉菜单与右侧的切换显示对齐?现在它与切换左对齐。 这是我的代码:
我正在尝试使用 ElementRef 来关注输入。除了在 ng-bootstrap 库的下拉列表中,这工作正常。如何在 ngbDropdown 中触发事件? 示例:https://stackblitz
我使用 ngb 下拉菜单来显示我的任务可能具有的不同状态('to do'、'in progress'、'done')。一切正常,但有一个小问题仍然困扰着我。单击其中一个选项后,我希望关闭下拉菜单。目前
在ng-bootstrap NgbDropdown ,您将如何显示所选按钮的文本,以便用户选择的任何项目都会替换最初显示的默认文本? 在下面的示例中,目标是显示用户选择的任何排序选项。 Sort
我想扩展 ng-Boostrap 的下拉功能,通过按浏览器的后退按钮(在移动设备上)来关闭菜单。但是 this.dropdown 在 hide 函数中是未定义的。为什么? import {Compon
我想扩展 ng-Boostrap 的下拉功能,通过按浏览器的后退按钮(在移动设备上)来关闭菜单。但是 this.dropdown 在 hide 函数中是未定义的。为什么? import {Compon
我在我的 Angular 2 应用程序中使用了 NgbDropdown 组件。它工作正常,但我想删除显示在按钮右侧的箭头。 Toggle dropdown Action - 1
我正在使用带有 ng-bootstrap 的 angular4。我想在单击下拉列表(文档的其余部分)外部时关闭我的下拉列表。在查看文档后,我发现 autoClose Type: boolean | “
我尝试在应用程序中使用 NbgDropdown,但收到以下错误: NullInjectorError:没有 NgbDropdown 的提供者! 我的 app.module 文件如下所示: import
ng 下拉菜单不起作用。 注:我按照答案here并将 Bootstrap 升级到 4-alpha,但它不工作。 下面是我的 package.json 文件: "@angular/animati
我正在使用 ngb 下拉列表在屏幕上显示用户列表。当用户单击下拉菜单时,它会显示用户详细信息表单。 问题 是,此表单会在其他用户和内容之上弹出。我需要用户详细信息折叠而不是弹出。 我尝试设置 aria
在我的 Angular 4 应用程序中,来自 ng-bootstrap 的 ngbDropdown-Element 不工作。 我已经为这种情况安装了以下 npm 模块: "@ng-bootstrap/
我使用 ng-bootstrap Angular 2。 About
升级到 Angular 8、NGBootstrap 5 后,我所有的 NgbDropdown 都停止在 ios 设备(cordova 应用程序)上工作。 ngbdropdown 在 Windows、A
我是一名优秀的程序员,十分优秀!