提交 f94e1854 编写于 作者: Q qiang

fix(mp-weixin): array.length in scoped slots #1827

上级 292dab33
......@@ -421,5 +421,21 @@ describe('mp:compiler-mp-weixin', () => {
'<block wx:for="{{$root.l0}}" wx:for-item="item" wx:for-index="index" wx:key="index"><view><block wx:if="{{item.g0}}"><view>{{item.m0}}</view></block></view></block>',
'with(this){var l0=__map(list,function(item,index){var $orig=__get_orig(item);var g0=Object.values(item.list).length;var m0=g0?test(item.list):null;return{$orig:$orig,g0:g0,m0:m0}});$mp.data=Object.assign({},{$root:{l0:l0}})}'
)
assertCodegen(
'<my-component><template v-slot="{item}">{{item.length}}<template></my-component>',
'<my-component scoped-slots-compiler="augmented" vue-id="551070e6-1" bind:__l="__l" vue-slots="{{[\'default\']}}"><block wx:if="{{$root.m0}}">{{$root.g0}}</block></my-component>',
'with(this){var m0=$hasScopedSlotsParams("551070e6-1");var g0=m0?$getScopedSlotsParams("551070e6-1","default","item").length:null;$mp.data=Object.assign({},{$root:{m0:m0,g0:g0}})}',
{
scopedSlotsCompiler: 'auto'
}
)
assertCodegen(
'<my-component><template v-slot="{item}">{{item.length}}<template></my-component>',
'<my-component generic:scoped-slots-default="test-my-component-default" data-vue-generic="scoped" vue-id="551070e6-1" bind:__l="__l" vue-slots="{{[\'default\']}}"></my-component>',
undefined,
{
scopedSlotsCompiler: 'legacy'
}
)
})
})
......@@ -28,6 +28,9 @@ function needSlotMode (path, ids) {
} else if (!path.scope.hasBinding(name) && !METHOD_BUILT_IN.includes(name)) {
need = true
}
} else if (path.key === 'property' && name === 'length') {
// 微信小程序平台无法观测 Array length 访问:https://developers.weixin.qq.com/community/develop/doc/000c8ee47d87a0d5b6685a8cb57000
need = true
}
}
})
......
......@@ -157,7 +157,7 @@ module.exports = {
newPath = path.findParent((path) => path.isLogicalExpression())
}
path.skip()
if (path.findParent((path) => path.shouldSkip)) {
if (path.findParent((path) => path.shouldSkip || (this.options.scopedSlotsCompiler === 'legacy' && path.isCallExpression() && path.node.callee.name === METHOD_RESOLVE_SCOPED_SLOTS))) {
return
}
path.replaceWith(getMemberExpr(path, IDENTIFIER_GLOBAL, path.node, this))
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册