- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想扩展 ng-Boostrap 的下拉功能,通过按浏览器的后退按钮(在移动设备上)来关闭菜单。但是 this.dropdown 在 hide 函数中是未定义的。为什么?
import {Component, Input, ViewChild} from '@angular/core';
import {NgbDropdown} from '@ng-bootstrap/ng-bootstrap';
@Component({
selector: 'app-mobile-dropdown',
templat: '<div ngbDropdown class="menu" [placement]="placement" (openChange)="openChange($event)">
<span class="menu-btn" ngbDropdownToggle><i [class]="btnIcon"></i><span *ngIf="btnLabel">{{btnLabel}}</span></span>
<div ngbDropdownMenu>
<a ngbDropdownItem *ngFor="let item of actions" class="dropdown-item" (click)="item.action()">{{item.label}}</a>
</div>
</div>
'
})
export class MobileDropdownComponent{
@ViewChild(NgbDropdown,{static:false}) dropdown: NgbDropdown;
@Input() placement: string;
@Input() btnIcon: string;
@Input() btnLabel: string;
@Input() actions: Array<any>;
hide(){
console.log('closing', this.dropdown);
window.removeEventListener('popstate', this.hide);
this.dropdown.close();
}
openChange(opened: boolean) {
if (opened) {
window.history.pushState('ddOpen',null,null);
window.addEventListener('popstate',this.hide);
} else {
if(history.state === 'ddOpen'){
window.history.back();
window.removeEventListener('popstate', this.hide);
}
}
}
}
解决方法:
在 hide() 函数中,作用域不是组件的作用域。
openChange(opened: boolean) {
const self=this;
function hide(){
console.log('closing', self.dropdown, self.actions);
window.removeEventListener('popstate', hide);
self.dropdown.close();
}
if (opened) {
window.history.pushState('ddOpen',null,null);
window.addEventListener('popstate',hide);
} else {
if(history.state === 'ddOpen'){
window.history.back();
window.removeEventListener('popstate', hide);
}
}
}
最佳答案
尝试
@ViewChild('dropdownRef', {static:false, read: NgbDropdown}) dropdown: NgbDropdown;
关于javascript - 为什么 @ViewChild(NgbDropdown) 在我的组件中不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59836293/
我想在我的导航栏中有一个登录下拉菜单。但是,只要单击登录表单中的某些内容,下拉菜单就会关闭。 另一个问题:如何使下拉菜单与右侧的切换显示对齐?现在它与切换左对齐。 这是我的代码:
我正在尝试使用 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
我是一名优秀的程序员,十分优秀!