【问题标题】:Dropdown component not having effect in Chromium browser下拉组件在 Chromium 浏览器中不起作用
【发布时间】:2018-08-07 14:08:39
【问题描述】:

我有一个带有下拉组件(基于<select>)的简单饼图,用于切换图表的数据(我使用的是角度 6)。它可以在 Firefox 中运行,但是当我在 chromium 上对其进行测试时,什么也没有发生(好像用户根本没有在下拉菜单上选择任何东西)。为什么会这样?完整的工作示例在 stackblitz here

例如,在SelectComponent 中有一个onClick 方法会发出选定的值(来自<option> 元素的值):

onClick(value: string): void {
  console.log(`I'm emitting ${value}`);
  this.select.emit(value);
}

在模板中:

<select>
  <option
    *ngFor="let item of items"
    value="{{item.value}}"
    (click)="onClick(item.value)"
  >{{ item.label }}</option>
</select>

我添加了console.log 用于调试,通常会在firefox 上打印到控制台,但在Chromium 上根本不会打印到控制台,就好像从未调用过onClick 方法一样。

我也试过onClick($event)而不是onClick(item.value),但什么也没发生。

有没有人遇到过类似的问题,这是一些 chartjs 错误,还是我遗漏了什么?

【问题讨论】:

  • 移动你的点击事件选择,一切顺利
  • @AliAdravi 如果我将(click) 更改为(select) 它也停止在Firefox 中工作。

标签: angular chart.js chromium eventemitter angular-event-emitter


【解决方案1】:

尝试在选择元素上使用(更改)事件,而不是在选项上使用(点击)

<select (change)="onChange($event)">
  ...

您可以从

访问当前值
$event.target.value

在选项上使用 change 事件而不是 click 事件的原因是 chrome 不会在选择选项上触发这样的事件 - 所以它与 angular 无关。

【讨论】:

  • 我已根据您的建议进行了更改,并且似乎有效:stackblitz.com/edit/working-version 但是,我不确定为什么?另外,我是否应该将@Output() select 更改为其他名称以避免与(select) 的默认浏览器实现发生冲突?
  • 正如我在回答中提到的,chrome 不会触发选项元素上的“点击”事件。有些浏览器可以,有些不可以,因此如果您的目标是跨浏览器支持,这不是处理此类问题的方法。你可以在这里阅读webbugtrack.blogspot.com/2007/11/…。它的旧条目,但似乎仍然是问题
猜你喜欢
  • 2020-04-05
  • 1970-01-01
  • 2019-03-12
  • 2019-01-24
  • 2014-04-05
  • 1970-01-01
  • 1970-01-01
  • 2021-04-28
  • 2013-06-15
相关资源
最近更新 更多