指令在角度 6 外单击

编程入门 行业动态 更新时间:2024-10-23 21:33:32
本文介绍了指令在角度 6 外单击的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

限时送ChatGPT账号..

我将 Angular 从 4 升级到 6,因此我的点击策略出现问题,它停止在所有组件上工作.

我的指令:

import { Directive, Output, EventEmitter, ElementRef, HostListener } from '@angular/core';@指示({选择器:'[clickOutside]'})导出类 ClickOutsideDirective {构造函数(私有_elementRef:ElementRef){}@输出()public clickOutside = new EventEmitter();@HostListener('document:click', ['$event.target'])公共点击(目标元素){const clickedInside = this._elementRef.nativeElement.contains(targetElement);如果(!clickedInside){this.clickOutside.emit(null);}}}

我的 component.html 使用了这个指令:

<divid=sidenav"*ngIf=this.opened"class =sidenav"[ngClass]="getClasses()";[ngStyle]="getStyles()";单击外部(clickOutside)="closeOutsideSidenav()";><标题>{{ navTitle }} </header><我*ngIf=this.showCloseButton";class =iconicicic-x-thin close-icon"(点击)=closeSidenav()";></i><ng-content></ng-content>

解决方案

您在模板中引用了 "this",这是不必要的.我做了一个该指令的工作示例:

https://stackblitz/edit/angular-piqewb

并且没有理由在 div 上设置两次指令.

<div id="sidenav" *ngIf="opened" class="sidenav" [ngClass]="getClasses()" [ngStyle]="getStyles()" (clickOutside)="closeOutsideSidenav()"><标题>{{ navTitle }} </header><i *ngIf="showCloseButton" class="iconicicicicic-x-thin close-icon" (click)="closeSidenav()"></i><ng-content></ng-content>

<div *ngIf="backdrop &&opened" class="sidenav-backdrop"></div>

I upgraded my Angular from 4 to 6, and consequently had a problem with my click-off policy, it stopped working on all components.

my directive:

import { Directive, Output, EventEmitter, ElementRef, HostListener } from '@angular/core';
    
@Directive({
  selector: '[clickOutside]'
})
export class ClickOutsideDirective {
    
  constructor(private _elementRef : ElementRef) { }
    
  @Output()
  public clickOutside = new EventEmitter();
   
  @HostListener('document:click', ['$event.target'])
  public onClick(targetElement) {
    const clickedInside = this._elementRef.nativeElement.contains(targetElement);
    if (!clickedInside) {
        this.clickOutside.emit(null);
    }
  }
}

My component.html that makes use of this directive:

<div 
  id="sidenav" 
  *ngIf="this.opened" 
  class="sidenav" 
  [ngClass]="getClasses()" 
  [ngStyle]="getStyles()" 
  clickOutside 
  (clickOutside)="closeOutsideSidenav()"
>
  <header> {{ navTitle }} </header>
  <i 
    *ngIf="this.showCloseButton" 
    class="iconic iconic-x-thin close-icon" 
    (click)="closeSidenav()"
  ></i>
  <ng-content></ng-content>
</div>
<div 
  *ngIf="this.backdrop && this.opened" 
  class="sidenav-backdrop"
></div>

解决方案

You're referencing "this" in your template, which is not necessary. I made a working example of that directive:

https://stackblitz/edit/angular-piqewb

And theres no reason to have the directive on the div twice.

<div id="sidenav" *ngIf="opened" class="sidenav" [ngClass]="getClasses()" [ngStyle]="getStyles()" (clickOutside)="closeOutsideSidenav()">
    <header> {{ navTitle }} </header>
    <i *ngIf="showCloseButton" class="iconic iconic-x-thin close-icon" (click)="closeSidenav()"></i>
    <ng-content></ng-content>
</div>

<div *ngIf="backdrop && opened" class="sidenav-backdrop"></div>

这篇关于指令在角度 6 外单击的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

更多推荐

[db:关键词]

本文发布于:2023-04-22 17:16:27,感谢您对本站的认可!
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:单击   指令   角度

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!