diff --git a/src/compile/nodes/Binding.ts b/src/compile/nodes/Binding.ts index ffd729431f..a4dcab3244 100644 --- a/src/compile/nodes/Binding.ts +++ b/src/compile/nodes/Binding.ts @@ -1,6 +1,7 @@ import Node from './shared/Node'; import getObject from '../../utils/getObject'; import Expression from './shared/Expression'; +import Component from '../Component'; export default class Binding extends Node { name: string; @@ -10,9 +11,16 @@ export default class Binding extends Node { obj: string; prop: string; - constructor(component, parent, scope, info) { + constructor(component: Component, parent, scope, info) { super(component, parent, scope, info); + if (info.expression.type !== 'Identifier' && info.expression.node.type !== 'MemberExpression') { + component.error(info, { + code: 'invalid-directive-value', + message: 'Can only bind to an identifier (e.g. `foo`) or a member expression (e.g. `foo.bar` or `foo[baz]`)' + }); + } + this.name = info.name; this.expression = new Expression(component, this, scope, info.expression); diff --git a/src/parse/index.ts b/src/parse/index.ts index 891fe0841d..3ae97f2ccf 100644 --- a/src/parse/index.ts +++ b/src/parse/index.ts @@ -220,6 +220,16 @@ export default function parse( options: ParserOptions = {} ): Ast { const parser = new Parser(template, options); + + // TODO we way want to allow multiple