UNPKG

@surface/custom-element

Version:

Provides support of directives and data binding on custom elements.

23 lines (22 loc) 1.06 kB
import { throwTemplateEvaluationError, tryEvaluateExpression, } from "../common.js"; export default class EventDirective { constructor(scope, element, descriptor) { this.name = descriptor.name; this.element = element; this.action = this.evaluate(scope, descriptor); this.element.addEventListener(this.name, this.action); } evaluate(scope, directive) { const action = tryEvaluateExpression(scope, directive.expression, directive.rawExpression, directive.stackTrace); if (!action) { throwTemplateEvaluationError(`Evaluation error in ${directive.rawExpression}: ${directive.expression} is not defined`, directive.stackTrace); } if (!(action instanceof Function)) { throwTemplateEvaluationError(`Evaluation error in ${directive.rawExpression}: ${directive.expression} is not a function`, directive.stackTrace); } return action; } dispose() { this.element.removeEventListener(this.name, this.action); } }