From 7103bde57b40737a7fba2d14d37af8d7f8a900ae Mon Sep 17 00:00:00 2001 From: daiwei Date: Mon, 11 Jul 2022 10:07:17 +0800 Subject: [PATCH 1/4] fix(runtime-core): support extends template for runtime compiler --- packages/runtime-core/src/component.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/runtime-core/src/component.ts b/packages/runtime-core/src/component.ts index 11a6cafbcf1..2b32cd27e3d 100644 --- a/packages/runtime-core/src/component.ts +++ b/packages/runtime-core/src/component.ts @@ -788,7 +788,7 @@ export function finishComponentSetup( (__COMPAT__ && instance.vnode.props && instance.vnode.props['inline-template']) || - Component.template + Component.template || instance.ctx.$options.template if (template) { if (__DEV__) { startMeasure(instance, `compile`) From 78a36f6481cacec3e40ed30ecfe6fd7af5e1a8f0 Mon Sep 17 00:00:00 2001 From: daiwei Date: Mon, 11 Jul 2022 10:17:59 +0800 Subject: [PATCH 2/4] fix types --- packages/runtime-core/src/component.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/runtime-core/src/component.ts b/packages/runtime-core/src/component.ts index 2b32cd27e3d..064907a146a 100644 --- a/packages/runtime-core/src/component.ts +++ b/packages/runtime-core/src/component.ts @@ -788,7 +788,7 @@ export function finishComponentSetup( (__COMPAT__ && instance.vnode.props && instance.vnode.props['inline-template']) || - Component.template || instance.ctx.$options.template + Component.template || (instance.ctx.$options as any).template if (template) { if (__DEV__) { startMeasure(instance, `compile`) From c2d42211ba3231c78f397eea1fb1c533f9bd3a84 Mon Sep 17 00:00:00 2001 From: daiwei Date: Tue, 12 Jul 2022 09:04:17 +0800 Subject: [PATCH 3/4] test: add test case --- packages/runtime-core/__tests__/apiOptions.spec.ts | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/packages/runtime-core/__tests__/apiOptions.spec.ts b/packages/runtime-core/__tests__/apiOptions.spec.ts index 18207f61dc3..da5fe346c32 100644 --- a/packages/runtime-core/__tests__/apiOptions.spec.ts +++ b/packages/runtime-core/__tests__/apiOptions.spec.ts @@ -12,6 +12,7 @@ import { createApp, computed } from '@vue/runtime-test' +import { render as domRender } from 'vue' describe('api: options', () => { test('data', async () => { @@ -1035,6 +1036,19 @@ describe('api: options', () => { expect(renderToString(h(Comp))).toBe('base,base') }) + test('extends template', () => { + const Comp = { + extends: { + template: `

Foo

` + } + } + + const root = document.createElement('div') as any + domRender(h(Comp), root) + expect(root.innerHTML).toBe(`

Foo

`) + }) + + test('options defined in component have higher priority', async () => { const Mixin = { msg1: 'base' From dbc6feb140a02ccae7a8efc987cfe6014bc4a496 Mon Sep 17 00:00:00 2001 From: Evan You Date: Wed, 31 Aug 2022 13:41:04 +0800 Subject: [PATCH 4/4] use resolve merged --- packages/runtime-core/src/component.ts | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/packages/runtime-core/src/component.ts b/packages/runtime-core/src/component.ts index 064907a146a..cbc63e13738 100644 --- a/packages/runtime-core/src/component.ts +++ b/packages/runtime-core/src/component.ts @@ -35,7 +35,8 @@ import { applyOptions, ComponentOptions, ComputedOptions, - MethodOptions + MethodOptions, + resolveMergedOptions } from './componentOptions' import { EmitsOptions, @@ -788,7 +789,8 @@ export function finishComponentSetup( (__COMPAT__ && instance.vnode.props && instance.vnode.props['inline-template']) || - Component.template || (instance.ctx.$options as any).template + Component.template || + resolveMergedOptions(instance).template if (template) { if (__DEV__) { startMeasure(instance, `compile`)