Aurelia `click` 要求事件目标与元素相同的属性

标签 aurelia

我知道 click.trigger 以及 click.delegate 工作得很好。但是,如果我想分配一个 click 事件,该事件仅在单击具有该属性的确切元素时触发,该怎么办?

如果是“正常”JS,我可能会做这样的事情:

el.addEventListener('click', function (e) {
    if (e.target === el) {
        // continue...
    }
    else {
        // el wasn't clicked directly
    }
});

是否已经有这样的属性,或者我需要自己创建一个?如果是这样,我希望它与其他类似,例如 click.target="someMethod()"。我怎样才能做到这一点?

编辑:我尝试过这个不起作用,因为回调函数的 this 指向自定义属性类 - 而不是使用属性类的元素;

import { inject } from 'aurelia-framework';

@inject(Element)
export class ClickTargetCustomAttribute {
    constructor (element) {
        this.element = element;

        this.handleClick = e => {
            console.log('Handling click...');

            if (e.target === this.element && typeof this.value === 'function') {
                console.log('Target and el are same and value is function :D');

                this.value(e);
            }
            else {
                console.log('Target and el are NOT same :/');
            }
        };
    }

    attached () {
        this.element.addEventListener('click', this.handleClick);
    }

    detached () {
        this.element.removeEventListener('click', this.handleClick);
    }
}

我这样使用它:

<div click-target.bind="toggleOpen">
    ....other stuff...
</div>

(在此模板的 viewModel 中,从自定义属性调用时,toggleOpen() 方法的 thisClickTargetCustomAttribute...)

我还希望 click-target.bind="functionName" 可以改为 click.target="functionName()" 就像原生的一样.

最佳答案

只需使用像click.delegate="toggleOpen($event)"这样的东西。 $event是触发事件,所以可以在toggleOpen中处理它

toggleOpen(event) {
    // check event.target here
}

您还可以将模板上下文中可用的任何其他值传递给 toggleOpen

关于Aurelia `click` 要求事件目标与元素相同的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38876670/

相关文章:

function - Aurelia repeat.for 多次调用函数

javascript - 将第 3 方 JavaScript 库 (dropzone.js) 添加到 Aurelia

aurelia - 如何编写自定义 ValidationRule

选择列表上的 Aurelia 验证

Aurelia 和 Shadow DOM

javascript - Aurelia 中的模板与类

html - 在模板的另一部分使用 Aurelia for 循环中的 ${$index}

gulp - Aurelia CLI 应用程序包自动更新变慢

typescript - 在 Aurelia/Typescript 应用程序中使用 noty

javascript - 输入值转换器覆盖change.trigger事件