From abcc0d99464c4da62cf18bc0b4111f9241826a7c Mon Sep 17 00:00:00 2001 From: qiang Date: Fri, 15 Apr 2022 11:04:54 +0800 Subject: [PATCH] fix(App): native components update view (question/140393) --- .../framework/dom/components/UniComponent.ts | 12 ++++++++++-- .../view/framework/dom/elements/UniElement.ts | 2 ++ .../src/view/framework/dom/elements/UniNode.ts | 16 ++++++++++++++-- .../framework/dom/elements/UniTextElement.ts | 1 + 4 files changed, 27 insertions(+), 4 deletions(-) diff --git a/packages/uni-app-plus/src/view/framework/dom/components/UniComponent.ts b/packages/uni-app-plus/src/view/framework/dom/components/UniComponent.ts index 9020e5a3b..3bd3aac81 100644 --- a/packages/uni-app-plus/src/view/framework/dom/components/UniComponent.ts +++ b/packages/uni-app-plus/src/view/framework/dom/components/UniComponent.ts @@ -94,6 +94,7 @@ export class UniComponent extends UniNode { } setText(text: string) { ;(this.$holder || this.$).textContent = text + this.updateView() } addWxsEvent(name: string, wxsEvent: string, flag: number) { // 此时 $ 还不存在,故传入 this,等事件触发时,再获取 $ @@ -137,6 +138,7 @@ export class UniComponent extends UniNode { this.$props[name] = value } } + this.updateView() } removeAttr(name: string) { if (isCssVar(name)) { @@ -144,6 +146,7 @@ export class UniComponent extends UniNode { } else { this.$props[name] = null } + this.updateView() } remove() { @@ -152,12 +155,17 @@ export class UniComponent extends UniNode { this.$app.unmount() removeElement(this.id) this.removeUniChildren() + this.updateView() } appendChild(node: Element) { - return (this.$holder || this.$).appendChild(node) + const res = (this.$holder || this.$).appendChild(node) + this.updateView(true) + return res } insertBefore(newChild: Node, refChild: Node) { - return (this.$holder || this.$).insertBefore(newChild, refChild) + const res = (this.$holder || this.$).insertBefore(newChild, refChild) + this.updateView(true) + return res } } diff --git a/packages/uni-app-plus/src/view/framework/dom/elements/UniElement.ts b/packages/uni-app-plus/src/view/framework/dom/elements/UniElement.ts index fb28dfb09..538ca1f62 100644 --- a/packages/uni-app-plus/src/view/framework/dom/elements/UniElement.ts +++ b/packages/uni-app-plus/src/view/framework/dom/elements/UniElement.ts @@ -120,6 +120,7 @@ export class UniElement extends UniNode { else { this.setAttribute(name, value as string) } + this.updateView() } removeAttr(name: string) { if (name === ATTR_CLASS) { @@ -129,6 +130,7 @@ export class UniElement extends UniNode { } else { this.removeAttribute(name) } + this.updateView() } setAttribute(name: string, value: unknown) { value = decodeAttr(this.$, value) diff --git a/packages/uni-app-plus/src/view/framework/dom/elements/UniNode.ts b/packages/uni-app-plus/src/view/framework/dom/elements/UniNode.ts index a7ad29ebb..425ec4609 100644 --- a/packages/uni-app-plus/src/view/framework/dom/elements/UniNode.ts +++ b/packages/uni-app-plus/src/view/framework/dom/elements/UniNode.ts @@ -43,6 +43,7 @@ export class UniNode { } setText(text: string) { this.$.textContent = text + this.updateView() } insert( parentNodeId: number, @@ -70,12 +71,17 @@ export class UniNode { removeElement(this.id) destroyRenderjs(this) this.removeUniChildren() + this.updateView() } appendChild(node: Node) { - return this.$.appendChild(node) + const ref = this.$.appendChild(node) + this.updateView(true) + return ref } insertBefore(newChild: Node, refChild: Node) { - return this.$.insertBefore(newChild, refChild) + const ref = this.$.insertBefore(newChild, refChild) + this.updateView(true) + return ref } appendUniChild(node: UniNode) { this.$children.push(node) @@ -137,4 +143,10 @@ export class UniNode { ) } } + updateView(isMounted?: boolean) { + // 通知原生组件更新位置 + if (this.isMounted || isMounted) { + window.dispatchEvent(new CustomEvent('updateview')) + } + } } diff --git a/packages/uni-app-plus/src/view/framework/dom/elements/UniTextElement.ts b/packages/uni-app-plus/src/view/framework/dom/elements/UniTextElement.ts index 9fe174164..8b60d6a4a 100644 --- a/packages/uni-app-plus/src/view/framework/dom/elements/UniTextElement.ts +++ b/packages/uni-app-plus/src/view/framework/dom/elements/UniTextElement.ts @@ -37,6 +37,7 @@ export class UniTextElement extends UniAnimationElement { setText(text: string) { this._text = text this.update() + this.updateView() } update(isMounted: boolean = false) { -- GitLab