Vue: .once与.self的配合不佳

创建于 2017-02-02  ·  6评论  ·  资料来源: vuejs/vue

考虑以下元素:

<div @click.self.once="eat">Eat <span>me</span></div>

如果我们单击“吃”这个词,一切都会按预期进行。 该事件被触发了一次,我们很高兴。

但是,如果我们单击作为子节点的“我”,然后单击“吃”,则该事件将永远不会触发! 似乎将.once判断为触发事件太容易了。

我认为.once应该将其标记为完成,除非它实际上已经被解雇了。

所有6条评论

感谢您提交问题。 请遵循问题报告准则,并提供最少的JSFiddle或JSBin,其中包含一组可导致您描述的行为的可重复步骤。

为什么要这样做?

你好,

我不是OP,但我认为我设法重现了他所指的问题。 我在下面附加了JSFiddle进行说明。

JSFiddle

  1. 单击单词'Eat'可以正常工作:触发事件并更新水果数据。

  2. 如果我们重新加载JSFiddle并单击span子元素“ me”,然后单击“ Eat”,则不会更新水果数据。

希望这可以帮助。

@boristhuy感谢您提供JSFiddle。 这正是我的意思。

这应该是一个错误。 当前,事件句柄一旦进入便会被删除,实际上由于修饰符检查,实际上并没有调用该事件句柄。

也许我们需要更新once代码以支持它。

喜欢

(function(){
  var called = false;
  return function($events){
    // modifiers check
    // called check
    if (called)return;
    called = true;
    // handler code
  }
})()

至于在渲染函数中使用的once ,将带来重大变化。 我正在尝试找到一种解决此问题的方法。

  1. [wip]为模板更新once genCode。
  2. 对渲染功能on: {'~click': handle}使用的once做[done],保留旧策略。
  3. [完成]在以下情况下,updateListeners中存在一个错误:
    旧: '~click': handle
    新增: 'click': handle2

@defcc我通过从被阻止执行的处理程序中返回一个特殊值来修复它。 这可能无法解决您提到的(3)错误,但如有必要,让我们在单独的PR中进行处理。

此页面是否有帮助?
0 / 5 - 0 等级

相关问题

gkiely picture gkiely  ·  3评论

julianxhokaxhiu picture julianxhokaxhiu  ·  3评论

robertleeplummerjr picture robertleeplummerjr  ·  3评论

paulpflug picture paulpflug  ·  3评论

6pm picture 6pm  ·  3评论