提交 0b74a921 编写于 作者: Q qiang

fix: 解决组件属性使用复杂的对象表达式在小程序编译报错的问题 question/103944

上级 a7dee553
...@@ -131,6 +131,7 @@ describe('mp:compiler-mp-weixin', () => { ...@@ -131,6 +131,7 @@ describe('mp:compiler-mp-weixin', () => {
'<block wx:for="{{({list1,list2})}}" wx:for-item="item" wx:for-index="key"></block>' '<block wx:for="{{({list1,list2})}}" wx:for-item="item" wx:for-index="key"></block>'
) )
assertCodegen('<test :obj="{x:0}"></test>', '<test vue-id="551070e6-1" obj="{{({x:0})}}" bind:__l="__l"></test>') assertCodegen('<test :obj="{x:0}"></test>', '<test vue-id="551070e6-1" obj="{{({x:0})}}" bind:__l="__l"></test>')
assertCodegen('<test :obj="{\'x\':0}"></test>', '<test vue-id="551070e6-1" obj="{{$root.a0}}" bind:__l="__l"></test>', 'with(this){var a0={"x":0};$mp.data=Object.assign({},{$root:{a0:a0}})}')
}) })
it('generate v-show directive', () => { it('generate v-show directive', () => {
......
// const { const t = require('@babel/types')
// IDENTIFIER_ATTR
// } = require('../../../constants')
// const getMemberExpr = require('../member-expr') const {
IDENTIFIER_ATTR
} = require('../../../constants')
const getMemberExpr = require('../member-expr')
module.exports = function processAttrs (paths, path, state, isComponent, tagName) { module.exports = function processAttrs (paths, path, state, isComponent, tagName) {
// 不再单独处理ObjectExpression,改为在转换temlplte时用()包裹(微信、QQ) const attrsPath = paths.attrs
// const attrsPath = paths.attrs if (attrsPath) {
// if (attrsPath) { attrsPath.get('value.properties').forEach(propertyPath => {
// attrsPath.get('value.properties').forEach(propertyPath => { const valuePath = propertyPath.get('value')
// const valuePath = propertyPath.get('value') // 对于普通的ObjectExpression不再单独处理,改为在转换temlplte时用()包裹(微信、QQ)
// if (valuePath.isObjectExpression()) { if (valuePath.isObjectExpression() && valuePath.node.properties.find(({ key }) => !t.isIdentifier(key))) {
// valuePath.replaceWith(getMemberExpr(null, IDENTIFIER_ATTR, valuePath.node, state)) valuePath.replaceWith(getMemberExpr(path, IDENTIFIER_ATTR, valuePath.node, state))
// } }
// }) })
// } }
return [] return []
} }
...@@ -42,6 +42,7 @@ function findScoped (path, state) { ...@@ -42,6 +42,7 @@ function findScoped (path, state) {
function findTest (path, state) { function findTest (path, state) {
let tests let tests
if (path) {
while (path.parentPath && path.key !== 'body') { while (path.parentPath && path.key !== 'body') {
if (path.key === 'consequent' || path.key === 'alternate') { if (path.key === 'consequent' || path.key === 'alternate') {
const testOrig = path.container.test const testOrig = path.container.test
...@@ -78,6 +79,7 @@ function findTest (path, state) { ...@@ -78,6 +79,7 @@ function findTest (path, state) {
} }
path = path.parentPath path = path.parentPath
} }
}
return tests return tests
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册