在 Angular 7 中使用 getElementById 在 DOM 元素上应用指令

2024-03-02

我有一些由第三方(plotly)生成的 HTML,我很想在它创建的 DOM 元素之一上应用我们已有的指令。

该指令在单击时打开一个 colorPicker 并将颜色设置为字符串。

我可以通过以下方式到达元素querySelector, or getElementById,但是我如何转换/包装它以便我可以添加一个指示?

I tried:

 const el = document.getElementById('myEl');
 const comp = new ElementRef(el)

or:

const comp = this.renderer.selectRootElement(el)

but comp没有提供帮助


如果生成了此 HTML,我建议为此库添加一个包装器组件。在里面,您可以用一个 DIV 包装您要放置生成的 HTML 的位置,并在该包装上添加您的指令。

像这样的东西:

@Component({
    selector: 'lib-wrapper',
    template: '<div myDirective><div #placeholder></div></div>',
})
export class LibWrapperComponent {
    @ViewChild('placeholder')
    placeholder: ElementRef<HTMLElement>;

    ngAfterViewInit() {
        myLibrary.doStuffOnElement(this.placeholder.nativeElement);
    }
}

Edit:如果您的指令完成了您需要的所有操作,但您的问题是需要将其绑定到的元素嵌套得很深,则可以使用选择器将输入添加到指令中:

@Directive({
  selector: 'clickListener',
})
export class ClickListener {
  @Input()
  clickListenerSelector = '';

  constructor(
    @Inject(ElementRef) private readonly elementRef: ElementRef<HTMLElement>,
  ) {}

  @HostListener('click', ['$event.target'])
  onClick(target: HTMLElement) {
    if (this.host.contains(target) {
       // Do your logic here
    }
  }

  private get host(): HTMLElement {
    return !this.clickListenerSelector
      ? this.elementRef.nativeElement
      : (this.elementRef.nativeElement.querySelector(this.clickListenerSelector) || this.elementRef.nativeElement);
  }

}

这样您就可以将指令添加到包装元素并将选择器传递给它。如果您没有传递选择器,它将像现在一样工作,如果选择器没有找到任何内容,它也会使用其 ElementRef 元素,就像它没有找到的那样。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Angular 7 中使用 getElementById 在 DOM 元素上应用指令 的相关文章

  • ng run project:deploy - 项目目标不存在

    我有一个 Angular Web App 的工作生产版本 我的 Azure 帐户 免费套餐 上有一个有效订阅 其中包含 AppService 计划 应用服务 资源组 存储帐户 KeyVault SQL Server 和 SignalR 我想
  • 如何使用 angular2 的路由器实现面包屑[重复]

    这个问题在这里已经有答案了 I use angular2最近 但不知道如何实施breadcrumb组件 任何人都可以帮忙吗 div class row style padding top 15px ol class breadcrumb l
  • 在角度项目中使用茉莉花进行单元测试订阅方法

    我正在尝试测试ngOnInit 具有的组件的方法subscribe method 成分 import Component OnInit from angular core import SharedDataService from serv
  • Chartjs + Angular6 未显示图表或任何错误

    我正在尝试以角度实现chart js 编写了一个简单的代码来在html上显示图表 但是页面上没有输出 也没有错误 我不明白问题出在哪里以及为什么显示图表失败 堆栈闪电战 https stackblitz com edit angularch
  • 带有 angular-cli 的 SVG 图标系统

    我有一个 Angular2 项目 它是通过 Angular CLI 创建的 在 webpack 中 有一个加载器来加载 svg sprite 并从 svgs 列表生成该 sprite 但是 当 angular cli 不允许我更改 webp
  • router.navigate 更改 URL,但不渲染组件

    而不是使用 a href my path my param a 在我的模板中 我愿意使用带参数的函数将我重定向到页面 所以 这就是我在 ts 文件中构建函数的方式 redirectToChat my param this router na
  • Angular 2 中的 Observable 和 ngFor

    下面是一个使用 rxjs Observables 的简单示例 Angular 2 组件 import Component OnInit from angular core import Observable from rxjs Observ
  • 是否可以使用纯 css 禁用 mat-tab 动画

    我想禁用 Angular Material mat tab 动画 内容滑入到位时发生的动画 我知道可以使用 disabled 属性 但我想知道是否可以使用纯 css 达到相同的效果 EDIT 我们的用户体验团队希望从材质选项卡中删除幻灯片动
  • 传单 - 导入 Geojson - Angular 6

    我尝试将 GeoJson 文件导入到 Angular 的应用程序 6 中的传单中 通过这个解决方案 我的 geojson 是在 leafletmap 中绘制的 但我有这个错误 我无法构建我的应用程序 有人知道一种解决方案吗 错误 TS234
  • 在 TypeScript / Angular 4+ 中将 Enum 键显示为字符串

    export enum Type TYPE 1 Apple TYPE 2 Orange TYPE 3 Banana 当我登录时Type TYPE 1 toString默认情况下会调用方法 console log Type TYPE 1 is
  • 如何使用 Angular 5 在单击按钮时调用多个方法?

    我正在使用 Angular 5 并面临问题 我想提交 点击 事件并一一调用两个或多个方法 请给我想法或解决方案 以便我可以提交 点击 事件并调用两个或多个方法 such as html 文件
  • 如何按顺序使用 RxJS 可观察量?

    事情是这样的 我有一个 HTTP get 请求 它返回一个 JSON 对象列表 我使用 RxJS 订阅接收该列表的数据 现在 对于该列表中的每个对象 我想执行另一个 HTTP 请求 然后将该请求的结果放入数组中 到目前为止 我已经能够做到这
  • AOT 编译器 - 包括延迟加载的外部模块

    我试图将外部模块 托管在 git npm 存储库中 作为延迟加载模块包含在我的 Angular 应用程序中 我正在使用 ngc 编译器编译我的外部模块 node modules bin ngc p tsconfig aot json 这是我
  • Angular2 和 lodash...找不到名称

    Angular2 和 lodash 为什么有这么多戏剧性的事情 我的意思是真的 下面是我的安装方法 npm install save lodash npm install save types lodash UPDATE 我按照博客做了这个
  • 如何以角度从守卫重定向到子路线

    如何从父路由的守卫重定向到子路由 同时保护子路由不被直接访问 绝对导航的问题当导航到子路由时 父组件上的守卫会在循环中再次调用 相对导航问题是警卫正在保护父路线 因此还没有激活的路线可供导航 此外 这可能不会保护子路由 也许同一个守卫也可以
  • 如何在 d3 中使用SimulationLinkDatum和SimulationNodeDatum

    我在使用SimulationLinkDatum 类型时遇到问题 我创建了两个类 Node 和 Link 来实现SimulationNodeDatum 和SimulationLinkDatum 当我尝试使用SimulationLinkDatu
  • 如何在Electron App中调用C# dll方法?

    我有一个电子应用程序 可以从读卡器读取信用卡详细信息 他们提供了一个 c dll 来与应用程序交互 我不知道如何从电子应用程序读取 dll 方法 首先使用以下命令检查 dll 中公开的函数依赖步行者 http www dependencyw
  • 在 C# 中解析 JS Date.toIsoString

    我需要将 JS 日期存储为 ISO 8601 日期 我目前正在从格式为 2019 06 22T00 00 00 000Z 的表单中获取日期 正如 JS 的 toIsoString 方法所期望的那样 当这个日期传递到我的 API 控制器时 我
  • 无法读取未定义的属性“toUpperCase”(“<输入名称 =“searchtext”[(ngModel)] =“searchtext”>

    我正在尝试从数字数组中过滤数字 但我遇到了这个错误 这是我的代码 应用程序模块 ts import BrowserModule from angular platform browser import NgModule from angul
  • Angular2 - 更改位置而不触发路线

    我有一个使用服务来加载项目列表的视图 我总是只显示一个项目 并使用 gt 按钮在项目之间移动 有没有办法在不触发 Angular 路由系统的情况下更改浏览器地址栏中的地址并将记录添加到浏览器历史记录中 我知道如果我使用 location g

随机推荐

  • 如何处理大型 git 存储库?

    我目前正在使用 git 来构建大型存储库 大约 12 GB 每个分支的大小为 3 GB 该存储库包含大量二进制文件 音频和图像 问题是克隆和拉取可能需要很多时间 特别是 解决增量 步骤可能非常非常长 解决此类问题的最佳方法是什么 我尝试删除
  • 如何在javascript中检查异步加载的脚本是否已完成加载

    使用 javascript 异步下载另一个 javascript 文件 我知道这可以通过在页面上插入一个新的脚本标签来完成src属性设置为文件 url 脚本下载完成后 我还需要运行一些代码 我一直在使用yepnope http yepnop
  • 出现 gdbm 错误:(13,'权限被拒绝') — 尽管 posix 权限看起来没问题

    我正在 python 2 7 6 中使用 shelve 进行缓存计算 并且遇到了所描述的问题HERE https stackoverflow com q 35771816 4038337对于我制作并实施的搁置文件建议的解决方案 https
  • 无法启动模拟器。原因:当react-native run-android时,模拟器在React Native启动之前退出

    我正在根据这个网站安装React Nativehttps medium com leonardobrunolima react native tips setting up your development environment for
  • 在 XAML 绑定表达式中使用变量

    我正在构建一个可以编辑 POCO 的控件 POCO 中有一个需要编辑的字段的描述符集合 我正在绑定一个ListBox s ItemsSource到这个集合 除其他外 描述符使我能够选择合适的DataTemplate以及 POCO 中的变量名
  • 周期可调的PRNG

    我需要构建一个周期可调的就地伪随机数生成器 另外 在一段时间内不得发生碰撞 也就是说 以下内容必须返回 true prng is generated at run time though a by hand solution would w
  • 如何克服导航栏的影响

    在我的应用程序中 我想在转到上一个视图时隐藏导航栏 并且我在 viewwiilldisaapper 方法中隐藏导航栏 但效果仍然存在 意味着它在弹出时显示白屏 那么任何人都可以告诉我解决方案吗 谢谢大家 您需要使用隐藏该页面 viewWil
  • 滚动然后对齐到顶部

    只是想知道是否有人知道我如何重新创建我不久前看到的导航栏样式 我刚刚找到了我在上面看到的网站 但不确定他们是如何到达那里的 基本上希望它随页面滚动然后锁定到顶部 http lesscss org http lesscss org 只需快速
  • iOS 中 @property 的默认值是多少?

    iOS 中 property 的默认值是什么 例如 如果我声明 property NSString Photographer 是默认值 分配 还是 保留 还是其他什么 原子 非原子 我无法从文档中找到此信息 谢谢 我相信默认值是 atomi
  • sklearn.impute.IterativeImputer 的实现

    考虑data其中包含以下一些 nan Column 1 Column 2 Column 3 Column 4 Column 5 0 NaN 15 0 63 0 8 0 40 0 1 60 0 51 0 NaN 54 0 31 0 2 15
  • 相交并合并两个对象数组

    我有两个数组 var odd name 1 extraProp1 propValue1 name 3 extraProp1 propValue2 var even name 1 extraProp2 prop1 name 2 extraPr
  • Javascript 未捕获类型错误:.split 不是函数

    我想做一个功能 用户每天只能领取一次硬币 我做了这个功能 split这样它就只比较日期Date 仅比较日期和时间 但是 我收到了这个 JavaScript 错误 未捕获的 TypeError 中间值 split 不是函数 有人知道如何解决这
  • 如何在主目录上撤消 git init ?

    I did git init and git add 在我的主目录中 我认为这减慢了每个操作的速度 因为该目录太大了 我怎样才能撤消git init主目录的 你可以这样做rm rf HOME git删除 git 存储的所有版本控制信息 这会
  • Python:每月的第三个星期五

    我是一个菜鸟Python程序员 我需要编写一个脚本来检查给定日期 以 月 日 年 形式作为字符串传递 是否是该月的第三个星期五 我正在使用Python 2 7 例如 这些日期可以帮助您更好地理解我的问题 手头有一份年度日历 输入 gt 输出
  • LINQ(或伪代码)按邻近度对项目进行分组

    有谁能够启发我如何使用 LINQ 或者必要时更合适的东西 来创建一个整数列表列表 这些整数列表按彼此的接近程度进行分组 基本上 我想创建组中的数字与任何其他数字在 5 以内 所以 给定 3 27 53 79 113 129 134 140
  • Inno Setup 查找子文件夹

    是否有办法获取目录中的所有 或仅第一个 子文件夹 我正在尝试将文件安装到具有动态名称的子目录中 它不是 Inno Setup 可用的常量之一 有办法找到这个子目录名吗 那么 要获取某个文件夹中第一个找到的子文件夹的名称 无论它是哪个 您可以
  • 将不需要的值替换为最接近且恰好为正的索引值

    这个问题与上一个问题不同 如何找到具有负值的索引并将该值替换为最接近的正值索引值 https stackoverflow com questions 59742108 how to find indices with a negative
  • 设置 NSStreamNetworkServiceTypeBackground “幕后作用”是什么?

    我有一个内部应用程序 不适用于 iPhone 商店分发 因此不受 Apple 批准 它需要在运行时保持少量 TCP 和 UDP 套接字绑定 在测试时 我注意到我的绑定套接字有一些奇怪的行为 只要设备进入睡眠状态 它就会关闭 例如 当您按下手
  • 设置为 Theme.NoTitleBar.Fullscreen 后应用程序崩溃

    如果我不取消标题栏 我的应用程序就会启动 但是当我取消标题栏时 它一启动就会崩溃 这是我到目前为止的代码 xml version 1 0 encoding utf 8 gt
  • 在 Angular 7 中使用 getElementById 在 DOM 元素上应用指令

    我有一些由第三方 plotly 生成的 HTML 我很想在它创建的 DOM 元素之一上应用我们已有的指令 该指令在单击时打开一个 colorPicker 并将颜色设置为字符串 我可以通过以下方式到达元素querySelector or ge