Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
yiicenne
uni-app
提交
344e1ccd
U
uni-app
项目概览
yiicenne
/
uni-app
与 Fork 源项目一致
Fork自
DCloud / uni-app
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
U
uni-app
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
344e1ccd
编写于
3月 14, 2023
作者:
Q
qiang
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
fix(mp): slotMultipleInstance in mp-toutiao, mp-baidu
上级
593e6e8d
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
73 addition
and
49 deletion
+73
-49
packages/uni-template-compiler/__tests__/compiler-mp-baidu.spec.js
...uni-template-compiler/__tests__/compiler-mp-baidu.spec.js
+12
-0
packages/uni-template-compiler/__tests__/compiler-mp-toutiao.spec.js
...i-template-compiler/__tests__/compiler-mp-toutiao.spec.js
+12
-0
packages/uni-template-compiler/__tests__/compiler-mp-weixin.spec.js
...ni-template-compiler/__tests__/compiler-mp-weixin.spec.js
+46
-48
packages/uni-template-compiler/lib/script/traverse/resolve-scoped-slots.js
...late-compiler/lib/script/traverse/resolve-scoped-slots.js
+3
-1
未找到文件。
packages/uni-template-compiler/__tests__/compiler-mp-baidu.spec.js
浏览文件 @
344e1ccd
...
...
@@ -162,6 +162,18 @@ describe('mp:compiler-mp-baidu', () => {
)
})
it
(
'
generate scoped slot with slotMultipleInstance
'
,
()
=>
{
assertCodegen
(
'
<my-component><template v-slot="item"><view>{{item}}</view></template></my-component>
'
,
'
<my-component vue-id="551070e6-1" vue-slots="{{[
\'
default
\'
]}}"><block slot="{{
\'
default
\'
+(
\'
.
\'
+0)}}" s-if="{{$root.m0}}"><block s-for="$root.l0" s-for-item="_item" s-for-index="_index"><view>{{_item}}</view></block></block></my-component>
'
,
'
with(this){var m0=$hasSSP("551070e6-1");var l0=m0?$getSSP("551070e6-1","default",true):null;$mp.data=Object.assign({},{$root:{m0:m0,l0:l0}})}
'
,
{
scopedSlotsCompiler
:
'
augmented
'
,
slotMultipleInstance
:
true
}
)
})
it
(
'
generate vue id
'
,
()
=>
{
assertCodegen
(
'
<Test/>
'
,
...
...
packages/uni-template-compiler/__tests__/compiler-mp-toutiao.spec.js
浏览文件 @
344e1ccd
...
...
@@ -91,4 +91,16 @@ describe('mp:compiler-mp-toutiao', () => {
'
<test bind:-data-custom-hidden="{{!(shown)}}" vue-id="551070e6-1" bind:__l="__l" vue-slots="{{[
\'
default
\'
]}}">hello world</test>
'
)
})
it
(
'
generate scoped slot with slotMultipleInstance
'
,
()
=>
{
assertCodegen
(
'
<my-component><template v-slot="item"><view>{{item}}</view></template></my-component>
'
,
'
<my-component vue-id="551070e6-1" bind:__l="__l" vue-slots="{{[
\'
default
\'
]}}"><block slot="{{
\'
default
\'
+(
\'
.
\'
+0)}}" tt:if="{{$root.m0}}"><block tt:for="{{$root.l0}}" tt:for-item="_item" tt:for-index="_index"><view>{{_item}}</view></block></block></my-component>
'
,
'
with(this){var m0=$hasSSP("551070e6-1");var l0=m0?$getSSP("551070e6-1","default",true):null;$mp.data=Object.assign({},{$root:{m0:m0,l0:l0}})}
'
,
{
scopedSlotsCompiler
:
'
augmented
'
,
slotMultipleInstance
:
true
}
)
})
})
packages/uni-template-compiler/__tests__/compiler-mp-weixin.spec.js
浏览文件 @
344e1ccd
...
...
@@ -307,54 +307,52 @@ describe('mp:compiler-mp-weixin', () => {
)
})
describe
(
'
mp:compiler-mp-weixin
'
,
()
=>
{
it
(
'
generate scoped slot with slotMultipleInstance
'
,
()
=>
{
assertCodegen
(
'
<my-component><template v-slot="{item}"><view>{{item}}</view></template></my-component>
'
,
'
<my-component vue-id="551070e6-1" bind:__l="__l" vue-slots="{{[
\'
default
\'
]}}"><block wx:if="{{$root.m0}}"><view wx:for="{{$root.l0}}" wx:for-item="_item" wx:for-index="_index" slot="{{
\'
default
\'
+(
\'
.
\'
+_index)}}">{{_item[
\'
item
\'
]}}</view></block></my-component>
'
,
'
with(this){var m0=$hasSSP("551070e6-1");var l0=m0?$getSSP("551070e6-1","default",true):null;$mp.data=Object.assign({},{$root:{m0:m0,l0:l0}})}
'
,
{
scopedSlotsCompiler
:
'
augmented
'
,
slotMultipleInstance
:
true
}
)
assertCodegen
(
'
<my-component><template v-slot="item"><view>{{item}}</view></template></my-component>
'
,
'
<my-component vue-id="551070e6-1" bind:__l="__l" vue-slots="{{[
\'
default
\'
]}}"><block wx:if="{{$root.m0}}"><view wx:for="{{$root.l0}}" wx:for-item="_item" wx:for-index="_index" slot="{{
\'
default
\'
+(
\'
.
\'
+_index)}}">{{_item}}</view></block></my-component>
'
,
'
with(this){var m0=$hasSSP("551070e6-1");var l0=m0?$getSSP("551070e6-1","default",true):null;$mp.data=Object.assign({},{$root:{m0:m0,l0:l0}})}
'
,
{
scopedSlotsCompiler
:
'
augmented
'
,
slotMultipleInstance
:
true
}
)
assertCodegen
(
'
<my-component><template v-slot="item"><view>{{item.text}}</view></template></my-component>
'
,
'
<my-component vue-id="551070e6-1" bind:__l="__l" vue-slots="{{[
\'
default
\'
]}}"><block wx:if="{{$root.m0}}"><view wx:for="{{$root.l0}}" wx:for-item="_item" wx:for-index="_index" slot="{{
\'
default
\'
+(
\'
.
\'
+_index)}}">{{_item.text}}</view></block></my-component>
'
,
'
with(this){var m0=$hasSSP("551070e6-1");var l0=m0?$getSSP("551070e6-1","default",true):null;$mp.data=Object.assign({},{$root:{m0:m0,l0:l0}})}
'
,
{
scopedSlotsCompiler
:
'
augmented
'
,
slotMultipleInstance
:
true
}
)
assertCodegen
(
'
<view><slot :item="item"><slot></view>
'
,
'
<view><block wx:if="{{$slots[
\'
default
\'
]}}"><slot name="{{
\'
default
\'
+(
\'
.
\'
+$root.m0)}}"></slot></block><block wx:else><slot></slot></block></view>
'
,
'
with(this){$initSSP();var m0=$setSSP("default",{"item":item});$mp.data=Object.assign({},{$root:{m0:m0}});$callSSP()}
'
,
{
scopedSlotsCompiler
:
'
augmented
'
,
slotMultipleInstance
:
true
}
)
assertCodegen
(
'
<view><slot v-bind="item"><slot></view>
'
,
'
<view><block wx:if="{{$slots[
\'
default
\'
]}}"><slot name="{{
\'
default
\'
+(
\'
.
\'
+$root.m0)}}"></slot></block><block wx:else><slot></slot></block></view>
'
,
'
with(this){$initSSP();var m0=$setSSP("default",item);$mp.data=Object.assign({},{$root:{m0:m0}});$callSSP()}
'
,
{
scopedSlotsCompiler
:
'
augmented
'
,
slotMultipleInstance
:
true
}
)
})
it
(
'
generate scoped slot with slotMultipleInstance
'
,
()
=>
{
assertCodegen
(
'
<my-component><template v-slot="{item}"><view>{{item}}</view></template></my-component>
'
,
'
<my-component vue-id="551070e6-1" bind:__l="__l" vue-slots="{{[
\'
default
\'
]}}"><block wx:if="{{$root.m0}}"><view wx:for="{{$root.l0}}" wx:for-item="_item" wx:for-index="_index" slot="{{
\'
default
\'
+(
\'
.
\'
+_index)}}">{{_item[
\'
item
\'
]}}</view></block></my-component>
'
,
'
with(this){var m0=$hasSSP("551070e6-1");var l0=m0?$getSSP("551070e6-1","default",true):null;$mp.data=Object.assign({},{$root:{m0:m0,l0:l0}})}
'
,
{
scopedSlotsCompiler
:
'
augmented
'
,
slotMultipleInstance
:
true
}
)
assertCodegen
(
'
<my-component><template v-slot="item"><view>{{item}}</view></template></my-component>
'
,
'
<my-component vue-id="551070e6-1" bind:__l="__l" vue-slots="{{[
\'
default
\'
]}}"><block wx:if="{{$root.m0}}"><view wx:for="{{$root.l0}}" wx:for-item="_item" wx:for-index="_index" slot="{{
\'
default
\'
+(
\'
.
\'
+_index)}}">{{_item}}</view></block></my-component>
'
,
'
with(this){var m0=$hasSSP("551070e6-1");var l0=m0?$getSSP("551070e6-1","default",true):null;$mp.data=Object.assign({},{$root:{m0:m0,l0:l0}})}
'
,
{
scopedSlotsCompiler
:
'
augmented
'
,
slotMultipleInstance
:
true
}
)
assertCodegen
(
'
<my-component><template v-slot="item"><view>{{item.text}}</view></template></my-component>
'
,
'
<my-component vue-id="551070e6-1" bind:__l="__l" vue-slots="{{[
\'
default
\'
]}}"><block wx:if="{{$root.m0}}"><view wx:for="{{$root.l0}}" wx:for-item="_item" wx:for-index="_index" slot="{{
\'
default
\'
+(
\'
.
\'
+_index)}}">{{_item.text}}</view></block></my-component>
'
,
'
with(this){var m0=$hasSSP("551070e6-1");var l0=m0?$getSSP("551070e6-1","default",true):null;$mp.data=Object.assign({},{$root:{m0:m0,l0:l0}})}
'
,
{
scopedSlotsCompiler
:
'
augmented
'
,
slotMultipleInstance
:
true
}
)
assertCodegen
(
'
<view><slot :item="item"><slot></view>
'
,
'
<view><block wx:if="{{$slots[
\'
default
\'
]}}"><slot name="{{
\'
default
\'
+(
\'
.
\'
+$root.m0)}}"></slot></block><block wx:else><slot></slot></block></view>
'
,
'
with(this){$initSSP();var m0=$setSSP("default",{"item":item});$mp.data=Object.assign({},{$root:{m0:m0}});$callSSP()}
'
,
{
scopedSlotsCompiler
:
'
augmented
'
,
slotMultipleInstance
:
true
}
)
assertCodegen
(
'
<view><slot v-bind="item"><slot></view>
'
,
'
<view><block wx:if="{{$slots[
\'
default
\'
]}}"><slot name="{{
\'
default
\'
+(
\'
.
\'
+$root.m0)}}"></slot></block><block wx:else><slot></slot></block></view>
'
,
'
with(this){$initSSP();var m0=$setSSP("default",item);$mp.data=Object.assign({},{$root:{m0:m0}});$callSSP()}
'
,
{
scopedSlotsCompiler
:
'
augmented
'
,
slotMultipleInstance
:
true
}
)
})
it
(
'
generate scoped slot
'
,
()
=>
{
...
...
packages/uni-template-compiler/lib/script/traverse/resolve-scoped-slots.js
浏览文件 @
344e1ccd
...
...
@@ -145,7 +145,9 @@ module.exports = function getResolveScopedSlots (parent, state) {
node
=
t
.
conditionalExpression
(
test
,
node
,
t
.
callExpression
(
t
.
identifier
(
METHOD_CREATE_EMPTY_VNODE
),
[]))
elements0
.
replaceWith
(
node
)
// 插槽名拼接 '.'+index
slotPath
.
replaceWith
(
t
.
binaryExpression
(
'
+
'
,
slotNode
,
t
.
binaryExpression
(
'
+
'
,
t
.
stringLiteral
(
'
.
'
),
scopedSlotsParams
.
index
)))
// 百度、字节小程序不支持 v-for 嵌套 slot,且支持渲染多个实例,固定输出到第一个
const
indexNode
=
[
'
mp-baidu
'
,
'
mp-toutiao
'
].
includes
(
state
.
options
.
platform
.
name
)
?
t
.
numericLiteral
(
0
)
:
scopedSlotsParams
.
index
slotPath
.
replaceWith
(
t
.
binaryExpression
(
'
+
'
,
slotNode
,
t
.
binaryExpression
(
'
+
'
,
t
.
stringLiteral
(
'
.
'
),
indexNode
)))
}
else
{
const
orgin
=
fnBody
.
get
(
'
body.0.argument
'
)
const
elements
=
orgin
.
get
(
'
elements
'
)
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录