From 99152119330ebf8cf0147f75de2bf9325ab53da6 Mon Sep 17 00:00:00 2001 From: qiang Date: Mon, 13 Mar 2023 18:16:49 +0800 Subject: [PATCH] feat(mp-baidu): v-bind with scopedSlotsCompiler: legacy --- packages/uni-mp-baidu/lib/uni.compiler.js | 12 ++++++++---- .../__tests__/compiler-mp-baidu.spec.js | 4 ++++ .../lib/template/traverse.js | 15 +++++++++++---- 3 files changed, 23 insertions(+), 8 deletions(-) diff --git a/packages/uni-mp-baidu/lib/uni.compiler.js b/packages/uni-mp-baidu/lib/uni.compiler.js index 405607adf2..2aaa9f1ab7 100644 --- a/packages/uni-mp-baidu/lib/uni.compiler.js +++ b/packages/uni-mp-baidu/lib/uni.compiler.js @@ -8,9 +8,13 @@ module.exports = { }, children: [] } - Object.keys(props).forEach(name => { - node.attr['var-' + name] = props[name].replace('{{', '').replace('}}', '') - }) + if (typeof props === 'string') { + node.attr['s-bind'] = props.replace('{{', '').replace('}}', '') + } else { + Object.keys(props).forEach(name => { + node.attr['var-' + name] = props[name].replace('{{', '').replace('}}', '') + }) + } return node }, resolveScopedSlots (slotName, { @@ -31,4 +35,4 @@ module.exports = { } return node } -} +} diff --git a/packages/uni-template-compiler/__tests__/compiler-mp-baidu.spec.js b/packages/uni-template-compiler/__tests__/compiler-mp-baidu.spec.js index fa6aced388..7faea75f1c 100644 --- a/packages/uni-template-compiler/__tests__/compiler-mp-baidu.spec.js +++ b/packages/uni-template-compiler/__tests__/compiler-mp-baidu.spec.js @@ -75,6 +75,10 @@ describe('mp:compiler-mp-baidu', () => { '{{ user.lastName }}', '' ) + assertCodegen( + '', + '' + ) }) it('generate scoped slot with scopedSlotsCompiler: auto', () => { diff --git a/packages/uni-template-compiler/lib/template/traverse.js b/packages/uni-template-compiler/lib/template/traverse.js index d5fa7474bd..72df0c39a0 100644 --- a/packages/uni-template-compiler/lib/template/traverse.js +++ b/packages/uni-template-compiler/lib/template/traverse.js @@ -306,9 +306,16 @@ function traverseRenderSlot (callExprNode, state) { let deleteSlotName = false // 标记是否组件 slot 手动指定了 name="default" if (state.options.scopedSlotsCompiler !== 'augmented' && callExprNode.arguments.length > 2) { // 作用域插槽 const props = {} - callExprNode.arguments[2].properties.forEach(property => { - props[property.key.value] = genCode(property.value) - }) + const arg2 = callExprNode.arguments[2] + const arg3 = callExprNode.arguments[3] + let bindings + if (t.isObjectExpression(arg2)) { + arg2.properties.forEach(property => { + props[property.key.value] = genCode(property.value) + }) + } else if (arg3) { + bindings = genCode(arg3) + } deleteSlotName = props.SLOT_DEFAULT && Object.keys(props).length === 1 if (!deleteSlotName) { if (!isStaticSlotName) { @@ -318,7 +325,7 @@ function traverseRenderSlot (callExprNode, state) { delete props.SLOT_DEFAULT return genSlotNode( slotName, - state.options.platform.createScopedSlots(slotName, props, state), + state.options.platform.createScopedSlots(slotName, bindings || props, state), callExprNode.arguments[1], state ) -- GitLab