【问题标题】:Click event won't trigger on click?点击事件不会在点击时触发?
【发布时间】:2018-04-18 11:40:33
【问题描述】:

我有以下 html(我的 angular 5 组件中的一个模板):

<div class="center">
    <object id="img" data="assets/img/big_layout.svg" #svg></object>
</div>

在我的组件中,我有这个:

  @ViewChild('svg') svg: ElementRef;

  ngAfterViewInit() {
    this.svg.nativeElement.addEventListener('load', () => { // wait for the svg to load
      console.log('Clicked...')
    }, false);
  }

正如预期的那样,这个逻辑可以正常工作——当组件加载时,我会为视图中的每个组件实例记录Clicked...

但是,只要我将事件从 'load' 更改为 'click',点击 svg 就不会触发任何事件?

知道为什么吗?

更新:

如链接问题中所述,以下 html 也不会触发点击事件:

<div class="center" (click)="onClick()">
    <object id="img" (click)="onClick()" data="assets/img/big_layout.svg" #svg></object>
</div>

这是一个废话demo

【问题讨论】:

  • 为什么不在object div 上使用(click) 事件?
  • @Flow 我之前尝试过,但它没有用...看到这个discussion
  • 你是如何尝试使用它的?
  • html:&lt;object id="img" data="assets/img/big_layout.svg" (click)="clickerFuntion()"&gt;&lt;/object &gt;ts:clickerFuntion(){console.log('Clicked...');}
  • 对象“不能”被点击:查看这个答案和 cmets:stackoverflow.com/a/25916723

标签: javascript angular dom svg


【解决方案1】:

奇怪的是它不适用于您的项目,可能是由于新的 angular 5 版本。

您可以通过直接在模板上绑定(click) 事件来实现您想要的:

<div class="center">
    <object id="img" data="assets/img/big_layout.svg" (click)="onClick()"></object>
</div>

并通过在组件文件中添加方法:

onClick() {
    console.log('Clicked');
}

编辑: 对象标签就像 iframe,出于安全目的不能访问它们!

【讨论】:

  • 如链接问题中所述,在对象或 div 中都没有 (click) 有效...
  • 哦,对不起,没看到!所以更奇怪
  • Appart 重复评论中的内容(以及已经在其他帖子中),这个答案不正确,因为编辑是针对第一部分的
猜你喜欢
  • 1970-01-01
  • 2020-12-27
  • 2011-11-19
  • 1970-01-01
  • 2013-05-19
  • 2015-12-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多