diff --git a/src/generators/dom/index.ts b/src/generators/dom/index.ts index f02b013d02..a2a32e4fb9 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')} }`; @@ -275,11 +275,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 566b1c83a1..7e82e5d399 100644 --- a/src/generators/nodes/Component.ts +++ b/src/generators/nodes/Component.ts @@ -209,7 +209,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 ab8a053151..d3bf50e8c4 100644 --- a/src/shared/index.js +++ b/src/shared/index.js @@ -145,6 +145,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); @@ -220,7 +224,8 @@ export var proto = { _set: _set, _mount: _mount, _unmount: _unmount, - _differs: _differs + _differs: _differs, + _flush: _flush }; export var protoDev = { @@ -235,5 +240,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