Angular2 检测模板视图中的元素是否具有类

2023-12-31

我们使用 bootstrap,有时它会自动向 DOM 元素添加类。附加到这些元素并检测何时将特定 css 类添加到组件模板子元素的最佳方法是什么?

假设我有这个组件:

import { Component, ViewChild, ElementRef } from '@angular/core';
import { HeaderService } from './header.service';

@Component({
    selector: 'header-comp',
    templateUrl: './Home/RenderLayoutHeader'
})

export class HeaderLayoutComponent {
    constructor(private _headerService: HeaderService) { }
}

这是我的视图模板的一部分:

<header-comp>      
<li class="nav-header-icon-list-item">
                        <div class="overlay-dropdown dropdown" id="patientDDL">
                            <button  class="btn btn-default dropdown-toggle session-menu-container" type="button" id="session-dropdown-menu" data-toggle="dropdown" data-backdrop="true" data-dismiss="modal"  aria-haspopup="true" aria-expanded="false">
                                <img data-initials="ER" src="https://lorempixel.com/40/40/abstract/" class="img-circle session-user-profile-img">

当 bootstrap 将“open”类添加到 #patentDDL 元素并在我的组件中执行函数时,如何在我的组件中进行检测?

Thanks!

编辑: 我根据 Gunter 的解决方案修改了我的组件,但是当我不在标准之前进行空检查时,我得到了空引用)

import { Component, ViewChild, ElementRef, DoCheck } from '@angular/core';
import { HeaderService } from './header.service';

@Component({
    selector: 'header-comp',
    templateUrl: './Home/RenderLayoutHeader'
})

export class HeaderLayoutComponent implements DoCheck {

    @ViewChild('patientDDL') patientDropDownList: ElementRef;

    constructor(private _headerService: HeaderService) { }

    ngDoCheck() {
        console.log('ngDoCheck called');
        if (this.patientDropDownList && this.patientDropDownList.nativeElement.classList.contains('open')) {
            this._headerService.setPatientDDLOpen(true);
        } else {
            this._headerService.setPatientDDLOpen(false);
        }

    }
}

此外,在模板加载时,控制台语句会被记录 4 次,但即使在多次添加/删除类之后,也不会再次调用它。

这是 angular2 rc1 不确定这是否相关。


添加模板变量以便能够查询元素。

<div #patientDDL class="overlay-dropdown dropdown" id="patientDDL">

查询元素

@ViewChild('patientDDL') patientDDL:ElementRef;

实施ngDoCheck()运行更改检测运行时检查是否添加了类:

ngDoCheck() {
  if(patientDDL.nativeElement.classList.contains('open')) {
    this.doSomething();
  }
} 

或在某些特定事件上

@HostListener('click', ['$event'])
clickHandler(event) {
  if(patientDDL.nativeElement.classList.contains('open')) {
    this.doSomething();
  }
} 
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Angular2 检测模板视图中的元素是否具有类 的相关文章

随机推荐

  • 未找到 vtkRenderer/ vtkRenderWindow 的覆盖

    我是 vtk 的新手 当我运行一个小示例时 它会生成两个错误 找不到 vtkRenderer 的覆盖 找不到 vtkRenderWindow 的覆盖 我用谷歌搜索了这个问题 但找不到合适的解决方案 当我尝试在没有 CMake 的情况下创建
  • python 只记录到文件

    我有一个运行 python 脚本的 cronjob 我添加了一个logging但由于这是一项日常工作 我每天都会收到有关其功能的电子邮件 这真的很烦人 但我似乎找不到一个设置 这将使其仅记录到日志文件中 usr bin python imp
  • 使用“__dict__”或“vars()”?

    内置功能vars 对我来说看起来更像Pythonic 但我明白了 dict 使用更频繁 Python 文档表明它们是等效的 一位博主声称 dict 比vars http pythondoeswhat blogspot com 2012 01
  • 从 Bash 函数返回布尔值

    我想编写一个 bash 函数来检查文件是否具有某些属性并返回 true 或 false 然后我可以在我的脚本中的 if 中使用它 但我应该返回什么 function myfun return 0 else return 1 fi 然后我像这
  • static_casting 的结果是 constexpr void* 常量表达式吗?

    clang 拒绝 gcc 允许的这段代码 int main static constexpr const void vp nullptr static constexpr const char cp static cast
  • 未捕获异步 javascript 中引发的异常

    基本上 为什么这个异常没有被捕获 var http require http options host www crash boom bang please com port 80 method GET try var req http r
  • 如何使用 Google Cloud Composer 设置 dbt?

    我正在尝试在 Google Cloud Composer 上安装 dbt 但遇到了依赖性问题 我已按照本文的说明进行操作 https blog doit intl com setup dbt with cloud composer ab70
  • Twitter 登录崩溃并出现 TWTRInvalidInitializationException

    当我尝试使用 Twitter 登录时 我的应用程序崩溃并显示错误消息 在应用程序设置中未设置有效的 Twitter Kit URL 方案的情况下尝试登录或点赞推文 请参见https dev twitter com twitterkit io
  • 鼠标悬停时更改 html 中的字体颜色和背景

    我使用一小段内联 HTML 代码来更改鼠标悬停时表格中单元格颜色的背景 我仅在特定的表格单元格上使用此功能 因此并非所有单元格都需要这样做 td 这很好用 但我还想更改字体颜色 因此默认情况下它是带有白色文本的黑色单元格 但是当鼠标悬停时
  • 自升级到 Rails 3.1 以来,form_for 参数数量错误(3 为 2)

    在我将应用程序移植到 Rails 3 1 之前 这个 form for 曾经可以工作 div class form box style padding left 1em div
  • 创建一个名为“file.ext:file.ext”的文件到底有什么作用? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我最近开始研究隐写术 并且在网上找到了一个教程 为了将新的文本文件隐藏在另一个文件中 教程提供者使用了类似于以下命令的内容 notepad
  • 静态成员函数的局部变量

    今天我们遇到了一个关于多线程环境中静态成员函数的问题 我们问自己但找不到满意答案的问题是 静态成员函数的局部变量也是静态的吗 header class A static int test implementation int A test
  • pandas dataframe 删除每个数字的第一行

    所以 基本上我有一个数据框 其第一列如下所示 1 2 2 3 3 3 3 4 4 5 如您所见 第一列由随机重复的数字组成 首先 我必须删除所有 然后删除每个数字的第一行 由于 1 只有一行 它应该消失 并且只有 2 的第二行保留 依此类推
  • 什么是 ASP.NET 提供程序?

    ASP NET Provider 中的 Provider 是什么意思 例如当我们谈论AuthorizationRuleProvider connectionStrings providerName 这是一种设计模式 提供商模型 http e
  • 在 foreach 中的 DataRow 上转换 null 文字或可能的 null 警告

    更新了我的 NET Core 3 1 控制台应用程序以使用 Nullables 功能并具有以下内容foreach loop DataTable profiles DB ListProfiles CS8600 warning here v f
  • AttributeError:模块“pandas”没有属性“to_csv”

    我从 csv 文件中取出了一些行 如下所示 pd DataFrame CV data take 5 columns CV data columns 并对其执行一些功能 现在我想再次将其保存在 csv 中 但出现错误module pandas
  • 如何更改 shell/bash 中的列名称?

    这个问题对于大多数人来说可能太简单了 但我真的不想手动做 所以 假设我在终端中有一个文件 如下所示 dz2t edison s GWAS head PHENO GWASID CHILDID VSTNUM GENDER GA 1001 100
  • 使用 ng-repeat 生成的项目中的增量计数器

    我用 ng repeat 生成了一个列表 其中每个项目都有一个计数变量 在列表项中 我有一个链接 我想在单击它时增加计数 我不知道如何用 Angular JS 方式解决这个问题 Plunker http plnkr co edit HfeL
  • Android googlemaps v2完成加载事件或回调

    我想在谷歌地图加载后做一些事情 maptiles已被填充 无论如何可以实现这一点吗 正如所指出的qubz https stackoverflow com users 496625 qubz ViewTreeObserver可用于实现地图加载
  • Angular2 检测模板视图中的元素是否具有类

    我们使用 bootstrap 有时它会自动向 DOM 元素添加类 附加到这些元素并检测何时将特定 css 类添加到组件模板子元素的最佳方法是什么 假设我有这个组件 import Component ViewChild ElementRef