diff --git a/src/generators/dom/index.ts b/src/generators/dom/index.ts index e6390bb572..94f90146d0 100644 --- a/src/generators/dom/index.ts +++ b/src/generators/dom/index.ts @@ -166,7 +166,7 @@ export default function dom( ? `@proto` : deindent` { - ${['destroy', 'get', 'fire', 'observe', 'on', 'set', 'teardown', '_set', '_mount', '_unmount', '_differs'] + ${['destroy', 'get', 'fire', 'observe', 'on', 'set', 'teardown', '_set', '_mount', '_unmount', '_differs', '_flush'] .map(n => `${n}: @${n === 'teardown' ? 'destroy' : n}`) .join(',\n')} }`; @@ -278,11 +278,7 @@ export default function dom( this._mount(options.target, options.anchor); ${(generator.hasComponents || generator.hasComplexBindings || templateProperties.oncreate || generator.hasIntroTransitions) && deindent` - ${generator.hasComponents && `this._lock = true;`} - ${(generator.hasComponents || generator.hasComplexBindings) && `@callAll(this._beforecreate);`} - ${(generator.hasComponents || templateProperties.oncreate) && `@callAll(this._oncreate);`} - ${(generator.hasComponents || generator.hasIntroTransitions) && `@callAll(this._aftercreate);`} - ${generator.hasComponents && `this._lock = false;`} + this._flush(); `} } `} diff --git a/src/generators/nodes/Component.ts b/src/generators/nodes/Component.ts index 481c7de0e3..8b7e7b5fbe 100644 --- a/src/generators/nodes/Component.ts +++ b/src/generators/nodes/Component.ts @@ -210,7 +210,7 @@ export default class Component extends Node { ); builder.addConditional( - `!${name_updating}.${binding.name} && changed.${binding.name}`, + `changed.${binding.name}`, setFromChild ); diff --git a/src/shared/index.js b/src/shared/index.js index d73d0979e1..e81119b069 100644 --- a/src/shared/index.js +++ b/src/shared/index.js @@ -146,6 +146,10 @@ export function run(fn) { export function set(newState) { this._set(assign({}, newState)); if (this.root._lock) return; + this.root._flush(); +} + +export function _flush() { this.root._lock = true; callAll(this.root._beforecreate); callAll(this.root._oncreate); @@ -221,7 +225,8 @@ export var proto = { _set: _set, _mount: _mount, _unmount: _unmount, - _differs: _differs + _differs: _differs, + _flush: _flush }; export var protoDev = { @@ -236,5 +241,6 @@ export var protoDev = { _set: _set, _mount: _mount, _unmount: _unmount, - _differs: _differs + _differs: _differs, + _flush: _flush }; diff --git a/test/runtime/samples/dynamic-component-changed-in-oncreate/Nested.html b/test/runtime/samples/dynamic-component-changed-in-oncreate/Nested.html new file mode 100644 index 0000000000..22a4cd7370 --- /dev/null +++ b/test/runtime/samples/dynamic-component-changed-in-oncreate/Nested.html @@ -0,0 +1,7 @@ + diff --git a/test/runtime/samples/dynamic-component-changed-in-oncreate/_config.js b/test/runtime/samples/dynamic-component-changed-in-oncreate/_config.js new file mode 100644 index 0000000000..3cdedcf721 --- /dev/null +++ b/test/runtime/samples/dynamic-component-changed-in-oncreate/_config.js @@ -0,0 +1,7 @@ +export default { + 'skip-ssr': true, + + html: ` +
Text: correct
+ ` +}; \ No newline at end of file diff --git a/test/runtime/samples/dynamic-component-changed-in-oncreate/main.html b/test/runtime/samples/dynamic-component-changed-in-oncreate/main.html new file mode 100644 index 0000000000..bae97d1913 --- /dev/null +++ b/test/runtime/samples/dynamic-component-changed-in-oncreate/main.html @@ -0,0 +1,20 @@ +<:Component {Child} bind:text=text /> +Text: {{text}}
+ + + \ No newline at end of file