最佳答案
我想关闭我的登录菜单下拉列表当用户点击任何地方以外的下拉列表,我想这样做与 Angular2和 Angular2“方法”..。
我已经实现了一个解决方案,但我对它真的没有信心。我认为必须有一个最简单的方法来达到同样的结果,所以如果你有任何想法... 让我们讨论:) !
以下是我的实施方案:
这是我的下拉列表的组件:
这是密码
export class UserMenuComponent {
_isVisible: boolean = false;
_subscriptions: Subscription<any> = null;
constructor(public subjects: SubjectsService) {
}
onClick(event) {
event.stopPropagation();
}
set isVisible(v) {
if( v ){
setTimeout( () => {
this._subscriptions = this.subjects.userMenu.subscribe((e) => {
this.isVisible = false;
})
}, 0);
} else {
this._subscriptions.unsubscribe();
}
this._isVisible = v;
}
get isVisible() {
return this._isVisible;
}
}
另一方面,还有应用程序组件(它是下拉组件的父组件) :
密码如下:
export class AppComponent {
constructor( public subjects: SubjectsService) {
document.addEventListener('click', () => this.onClick());
}
onClick( ) {
this.subjects.userMenu.next({});
}
}
这个设置超时延迟订阅到当前的 JavaScript 代码结束,这解决了问题,但在我看来是以一种非常优雅的方式。
如果你知道更清洁,更好,更聪明,更快或更强的解决方案,请让我知道:) !