指令单击外部角度 6

2024-03-10

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

我的指令:

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);
    }
  }
}

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

<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>

view:

<div #insideElement></div>

成分:

export class SomeClass {
  @ViewChild("insideElement") insideElement;
  @HostListener('document:click', ['$event.target'])

  public onClick(targetElement) {
    const clickedInside = this.insideElement.nativeElement.contains(targetElement);
    if (!clickedInside) {
      console.log('outside clicked');
    }
  }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

指令单击外部角度 6 的相关文章

随机推荐

  • iOS 静默推送通知仅在连接到 xcode 时有效

    我有一个奇怪的问题 我最近将 Xcode 更新到 6 1 1 以对我之前使用 Xcode 5 发布的应用程序进行更改 运行良好 现在 由于某种原因 当我使用新的 Xcode 测试后台静默推送通知时 它只有在我的 iPhone 连接到 Mac
  • 在 Dart 中合并两个对象列表

    我有具有参数名称和参数计数器的对象 这些对象存储在列表中 我的列表中的某些项目具有重复的参数 名称 我想删除列表内的重复项 并将该重复项的计数器添加到重复对象参数中 class Person Person this name this co
  • 对于大输入返回负数的阶乘函数

    我的阶乘函数似乎适用于 1 到 6 之间的数字 但不适用于大于 6 的数字 例如从 21 开始 结果是否定的 我不明白为什么 这是我的功能 factorial Int gt Int factorial 0 1 factorial 1 1 f
  • Apache Flink 检查点卡住

    我们正在运行一个 ListState 介于 300GB 到 400GB 之间的作业 并且有时该列表可能会增加到数千 在我们的用例中 每个项目都必须有自己的 TTL 因此我们使用 S3 上的 RocksDB 后端为此 ListState 的每
  • for 循环后的 Python 语法错误(在解释器中)

    我正在从控制台运行一些 python 代码 粘贴 并得到意外的结果 代码如下所示 parentfound False structfound False instruct False wordlist fileHandle open con
  • 如何获取 ImageView 中 Drawable 的尺寸? [复制]

    这个问题在这里已经有答案了 检索 ImageView 中 Drawable 尺寸的最佳方法是什么 My ImageView有一个初始化方法 我在其中创建ImageView private void init coverImg new Ima
  • 在 C++ 中使用 new 创建引用

    我有以下代码 似乎用 new 创建引用是可以的 但是当用 new 创建对象时 当我尝试重新收集分配的内存时 它会崩溃 float f new float 1 3 delete f float f1 new float delete f1 我
  • “<-”是否意味着在Haskell中分配变量?

    刚开始Haskell 据说Haskell中除了IO包之外的所有东西都是 不可变的 那么当我将名称绑定到某个东西时 它总是不可变的 问题 如下 Prelude gt let removeLower x c c lt x c elem A Z
  • Web API 序列化从小写字母开始的属性

    如何配置要使用的 Web API 的序列化camelCase 从小写字母开始 属性名称而不是PascalCase就像 C 中一样 我可以在整个项目的全球范围内进行吗 如果您想更改 Newtonsoft Json 又名 JSON NET 中的
  • 为重复的索引值添加后缀

    这是一个 df 0 01 0 029064 0 01 0 032876 0 01 0 040795 0 02 0 027003 0 02 0 0315 需要将其与另一个框架连接 但出现错误 无法从重复轴重新索引 我想要的是这样的 df 0
  • vs2015不断添加project.lock.json到tfs

    我的文件夹结构是 解决方案文件夹 tfignore 文件 每个项目的文件夹 但 vs2015 继续将我的 project lock json 文件包含在源代码管理中 在我的 tfignore 文件中 我添加了 project lock js
  • C 中的 case 标签不会减少为整数常量?

    我正在开发一个游戏 我运行了我的代码并收到错误 case 标签不会减少为整数常量 我想我知道这意味着什么 但是我该如何解决它呢 这是我的代码 include
  • 如何将列表列表从宽变为长

    我有一个具有共同结构的列表列表 require data table l lt list a1 list b data table rnorm 3 c data table rnorm 3 d data table rnorm 3 a2 l
  • C++ 与 Python 精度

    尝试查找 num num 的前 k 位数字的问题我用 C 和 Python 编写了相同的程序 C long double intpart num f digit k cin gt gt num gt gt k f digit pow 10
  • 元组比较

    我有一本定义如下的字典 d date tuple date open tuple open close tuple close min tuple min max tuple max MA tuple ma 这些元组中的每一个都包含一个值列
  • 在 iOS 中实现 Google 自定义搜索 API

    我浏览了几个链接 以便找到在 ios 应用程序中实现 google customsearchapi 的正确步骤 并在此过程中花费了大约 6 7 个小时 Links https developers google com custom sea
  • 模型的 flow_from_directory 拟合产生 ValueError:输入 0 与图层模型不兼容

    我有以下模型 我尝试使用 ImageDataGenerator 与 flow from directory 和 fit generator 来拟合模型 但是出现以下错误 ValueError Input 0 is incompatible
  • 在 Swift 中接收 Websocket 数据

    我继续这个从这个问题 https stackoverflow com questions 65988137 how do i send a dictionary to a client using vapor websockets 6598
  • 如何使用React hooks和react-router执行身份验证

    我正在尝试在每次路线更改时对用户进行身份验证react router dom and react hooks 这个想法是 每次用户导航到某个路线时 系统都会进行 api 调用并对用户进行身份验证 我需要实现这一目标 因为我使用react r
  • 指令单击外部角度 6

    我将 Angular 从 4 升级到 6 因此我的点击策略出现了问题 它停止在所有组件上工作 我的指令 import Directive Output EventEmitter ElementRef HostListener from an