diff --git a/packages/uni-mp-compiler/__tests__/component.spec.ts b/packages/uni-mp-compiler/__tests__/component.spec.ts
index 5b6c2049c93684b1507897dd39dd62c7b899ea77..81d006cb06a7394ad0c992443c715f43daf5b409 100644
--- a/packages/uni-mp-compiler/__tests__/component.spec.ts
+++ b/packages/uni-mp-compiler/__tests__/component.spec.ts
@@ -104,9 +104,17 @@ describe('compiler: transform component', () => {
``,
`(_ctx, _cache) => {
return { a: _ctx.b, b: _ctx.d, c: _n(_ctx.f), d: _s(_ctx.h), e: _o(_ctx.i), f: _ctx.o, g: _ctx.r, h: _ctx.t, i: _o($event => _ctx.j = $event), j: _o($event => _ctx.k = $event), k: _p({ ['prop-a']: 'l', ['prop-b']: _ctx.m, first: _ctx.j, last: _ctx.k }) }
+}`
+ )
+ assert(
+ ``,
+ ``,
+ `(_ctx, _cache) => {
+ return _e({ a: _ctx.ok }, _ctx.ok ? { b: _p({ accordion: true }) } : { c: _p({ accordion: true }) })
}`
)
})
+
test(`mini program component`, () => {
const filename = 'pages/vant/vant'
addMiniProgramPageJson(filename, {
diff --git a/packages/uni-mp-compiler/__tests__/vIf.spec.ts b/packages/uni-mp-compiler/__tests__/vIf.spec.ts
index 52d844adb153b4b70f17f8b7d30464033b2d694e..bdfc15b44860e10af90ec1b5815a2b7d6c084c5a 100644
--- a/packages/uni-mp-compiler/__tests__/vIf.spec.ts
+++ b/packages/uni-mp-compiler/__tests__/vIf.spec.ts
@@ -179,7 +179,7 @@ describe(`compiler: v-if`, () => {
test(`v-for + v-if + v-else`, () => {
assert(
``,
- ``,
+ ``,
`(_ctx, _cache) => {
return { a: _f(_ctx.items, (item, k0, i0) => { return _ctx.ok ? { a: '2a9ec0b0-0' + '-' + i0 } : { b: '2a9ec0b0-1' + '-' + i0, c: _p({ title: item.title }) }; }), b: _ctx.ok }
}`
diff --git a/packages/uni-mp-compiler/src/transforms/transformComponent.ts b/packages/uni-mp-compiler/src/transforms/transformComponent.ts
index b71b89ef111a1fa2cbedebaa43a397e4b553afdc..647609b107cd59bc135872fdf1875dfad154299b 100644
--- a/packages/uni-mp-compiler/src/transforms/transformComponent.ts
+++ b/packages/uni-mp-compiler/src/transforms/transformComponent.ts
@@ -3,6 +3,7 @@ import {
ComponentNode,
createSimpleExpression,
DirectiveNode,
+ ElementNode,
isSimpleIdentifier,
isStaticExp,
NodeTypes,
@@ -34,6 +35,7 @@ import {
} from '@babel/types'
import { RENDER_PROPS } from '../runtimeHelpers'
import { parseExpr } from '../ast'
+import { isIfElementNode } from './vIf'
export const transformComponent: NodeTransform = (node, context) => {
if (!isUserComponent(node, context as any)) {
@@ -229,6 +231,7 @@ export function isPropsBinding({ arg }: DirectiveNode) {
export function rewritePropsBinding(
dir: DirectiveNode,
+ node: ElementNode,
context: TransformContext
) {
dir.exp = createSimpleExpression(
@@ -239,6 +242,6 @@ export function rewritePropsBinding(
dir.loc,
context
)!
- )
+ ) + (isIfElementNode(node) && node.vIf.name === 'else' ? `||''` : '')
)
}
diff --git a/packages/uni-mp-compiler/src/transforms/transformIdentifier.ts b/packages/uni-mp-compiler/src/transforms/transformIdentifier.ts
index 7986f3143006442cf51a543594ba7f0e873130be..9467d8c187118b6b53f4dc2e61a290adc5599858 100644
--- a/packages/uni-mp-compiler/src/transforms/transformIdentifier.ts
+++ b/packages/uni-mp-compiler/src/transforms/transformIdentifier.ts
@@ -81,7 +81,7 @@ export const transformIdentifier: NodeTransform = (node, context) => {
hasStyleBinding = true
rewriteStyle(i, dir, props, context)
} else if (isPropsBinding(dir)) {
- rewritePropsBinding(dir, context)
+ rewritePropsBinding(dir, node, context)
} else {
dir.exp = rewriteExpression(exp, context)
}