fix contextual component bindings

pull/1864/head
Rich Harris 7 years ago
parent 6c854a6d57
commit 4c2fdcf657

@ -445,8 +445,10 @@ export default class ElementWrapper extends Wrapper {
const contextual_dependencies = new Set();
group.bindings.forEach(binding => {
// TODO this is a mess
addToSet(dependencies, binding.dependencies);
addToSet(contextual_dependencies, binding.contextual_dependencies);
addToSet(contextual_dependencies, binding.handler.contextual_dependencies);
if (!binding.updateDom) return;

@ -192,7 +192,17 @@ export default class InlineComponentWrapper extends Wrapper {
const contextual_dependencies = Array.from(binding.expression.contextual_dependencies);
const dependencies = Array.from(binding.expression.dependencies);
const lhs = component.source.slice(binding.expression.node.start, binding.expression.node.end).trim();
let lhs = component.source.slice(binding.expression.node.start, binding.expression.node.end).trim();
if (binding.isContextual && binding.expression.node.type === 'Identifier') {
// bind:x={y} — we can't just do `y = x`, we need to
// to `array[index] = x;
const { name } = binding.expression.node;
const { object, property, snippet } = block.bindings.get(name)();
lhs = snippet;
contextual_dependencies.push(object, property);
}
const args = ['value'];
if (contextual_dependencies.length > 0) {

@ -1,6 +1,8 @@
<script>
import Foo from './Foo.html';
export let p;
export let foo;
export let bar;
export let baz;

Loading…
Cancel
Save