Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
DCloud
uni-app
提交
c54d85e1
U
uni-app
项目概览
DCloud
/
uni-app
3 个月 前同步成功
通知
725
Star
38705
Fork
3642
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
7
列表
看板
标记
里程碑
合并请求
1
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
U
uni-app
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
7
Issue
7
列表
看板
标记
里程碑
合并请求
1
合并请求
1
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
c54d85e1
编写于
11月 17, 2021
作者:
fxy060608
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
fix(mp): ensure scoped slots context
上级
69de2d3d
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
11 addition
and
5 deletion
+11
-5
packages/uni-mp-vue/dist/vue.runtime.esm.js
packages/uni-mp-vue/dist/vue.runtime.esm.js
+5
-2
packages/uni-mp-vue/lib/vue.runtime.esm.js
packages/uni-mp-vue/lib/vue.runtime.esm.js
+1
-1
packages/uni-mp-vue/src/helpers/withScopedSlot.ts
packages/uni-mp-vue/src/helpers/withScopedSlot.ts
+5
-2
未找到文件。
packages/uni-mp-vue/dist/vue.runtime.esm.js
浏览文件 @
c54d85e1
...
...
@@ -5055,8 +5055,8 @@ function findScopedSlotInvoker(vueId, instance) {
//@ts-ignore
function
withScopedSlot
(
fn
,
{
name
,
path
,
vueId
,
})
{
fn
.
path
=
path
;
const
instance
=
getCurrentInstance
();
fn
.
path
=
path
;
const
scopedSlots
=
(
instance
.
$ssi
||
(
instance
.
$ssi
=
{}));
const
invoker
=
scopedSlots
[
vueId
]
||
...
...
@@ -5081,7 +5081,10 @@ function createScopedSlotInvoker(instance) {
// 循环第一个 slot 时,重置 data
slot
.
data
=
{};
}
// 确保当前 slot 的上下文,类似 withCtx
const
prevInstance
=
setCurrentRenderingInstance
(
instance
);
slot
.
data
[
key
]
=
slot
.
fn
(
args
,
key
,
slotName
+
(
hasKey
?
'
-
'
+
key
:
''
));
setCurrentRenderingInstance
(
prevInstance
);
// TODO 简单的 forceUpdate,理论上,可以仅对 scoped slot 部分数据 diff 更新
instance
.
proxy
.
$forceUpdate
();
};
...
...
@@ -5130,4 +5133,4 @@ function createApp(rootComponent, rootProps = null) {
}
const
createSSRApp
=
createApp
;
export
{
EffectScope
,
Fragment
,
ReactiveEffect
,
Text
,
c
,
callWithAsyncErrorHandling
,
callWithErrorHandling
,
computed
,
createApp
,
createSSRApp
,
createVNode$1
as
createVNode
,
createVueApp
,
customRef
,
d
,
defineComponent
,
defineEmits
,
defineExpose
,
defineProps
,
e
,
effect
,
effectScope
,
f
,
getCurrentInstance
,
getCurrentScope
,
h
,
inject
,
injectHook
,
isInSSRComponentSetup
,
isProxy
,
isReactive
,
isReadonly
,
isRef
,
logError
,
markRaw
,
mergeDefaults
,
mergeProps
,
n
,
nextTick
,
o
,
onActivated
,
onBeforeMount
,
onBeforeUnmount
,
onBeforeUpdate
,
onDeactivated
,
onErrorCaptured
,
onMounted
,
onRenderTracked
,
onRenderTriggered
,
onScopeDispose
,
onUnmounted
,
onUpdated
,
patch
,
provide
,
proxyRefs
,
queuePostFlushCb
,
r
,
reactive
,
readonly
,
ref
,
resolveComponent
,
resolveDirective
,
resolveFilter
,
s
,
setupDevtoolsPlugin
,
shallowReactive
,
shallowReadonly
,
shallowRef
,
stop
,
t
,
toHandlers
,
toRaw
,
toRef
,
toRefs
,
triggerRef
,
unref
,
useAttrs
,
useSSRContext
,
useSlots
,
version
,
w
,
warn$1
as
warn
,
watch
,
watchEffect
,
watchPostEffect
,
watchSyncEffect
,
withAsyncContext
,
withCtx
,
withDefaults
,
withDirectives
,
withModifiers
,
withScopeId
};
export
{
EffectScope
,
Fragment
,
ReactiveEffect
,
Text
,
c
,
callWithAsyncErrorHandling
,
callWithErrorHandling
,
computed
,
createApp
,
createSSRApp
,
createVNode$1
as
createVNode
,
createVueApp
,
customRef
,
d
,
defineComponent
,
defineEmits
,
defineExpose
,
defineProps
,
e
,
effect
,
effectScope
,
f
,
getCurrentInstance
,
getCurrentScope
,
h
,
inject
,
injectHook
,
isInSSRComponentSetup
,
isProxy
,
isReactive
,
isReadonly
,
isRef
,
logError
,
markRaw
,
mergeDefaults
,
mergeProps
,
n
,
nextTick
,
o
,
onActivated
,
onBeforeMount
,
onBeforeUnmount
,
onBeforeUpdate
,
onDeactivated
,
onErrorCaptured
,
onMounted
,
onRenderTracked
,
onRenderTriggered
,
onScopeDispose
,
onUnmounted
,
onUpdated
,
patch
,
provide
,
proxyRefs
,
queuePostFlushCb
,
r
,
reactive
,
readonly
,
ref
,
resolveComponent
,
resolveDirective
,
resolveFilter
,
s
,
set
CurrentRenderingInstance
,
set
upDevtoolsPlugin
,
shallowReactive
,
shallowReadonly
,
shallowRef
,
stop
,
t
,
toHandlers
,
toRaw
,
toRef
,
toRefs
,
triggerRef
,
unref
,
useAttrs
,
useSSRContext
,
useSlots
,
version
,
w
,
warn$1
as
warn
,
watch
,
watchEffect
,
watchPostEffect
,
watchSyncEffect
,
withAsyncContext
,
withCtx
,
withDefaults
,
withDirectives
,
withModifiers
,
withScopeId
};
packages/uni-mp-vue/lib/vue.runtime.esm.js
浏览文件 @
c54d85e1
...
...
@@ -4729,4 +4729,4 @@ function createVueApp(rootComponent, rootProps = null) {
function
withModifiers
()
{
}
function
createVNode$1
()
{
}
export
{
EffectScope
,
Fragment
,
ReactiveEffect
,
Text
,
callWithAsyncErrorHandling
,
callWithErrorHandling
,
computed
,
createVNode$1
as
createVNode
,
createVueApp
,
customRef
,
defineComponent
,
defineEmits
,
defineExpose
,
defineProps
,
effect
,
effectScope
,
getCurrentInstance
,
getCurrentScope
,
inject
,
injectHook
,
isInSSRComponentSetup
,
isProxy
,
isReactive
,
isReadonly
,
isRef
,
logError
,
markRaw
,
mergeDefaults
,
mergeProps
,
nextTick
,
onActivated
,
onBeforeMount
,
onBeforeUnmount
,
onBeforeUpdate
,
onDeactivated
,
onErrorCaptured
,
onMounted
,
onRenderTracked
,
onRenderTriggered
,
onScopeDispose
,
onUnmounted
,
onUpdated
,
patch
,
provide
,
proxyRefs
,
queuePostFlushCb
,
reactive
,
readonly
,
ref
,
resolveComponent
,
resolveDirective
,
resolveFilter
,
shallowReactive
,
shallowReadonly
,
shallowRef
,
stop
,
toHandlers
,
toRaw
,
toRef
,
toRefs
,
triggerRef
,
unref
,
useAttrs
,
useSSRContext
,
useSlots
,
version
,
warn$1
as
warn
,
watch
,
watchEffect
,
watchPostEffect
,
watchSyncEffect
,
withAsyncContext
,
withCtx
,
withDefaults
,
withDirectives
,
withModifiers
,
withScopeId
};
export
{
EffectScope
,
Fragment
,
ReactiveEffect
,
Text
,
callWithAsyncErrorHandling
,
callWithErrorHandling
,
computed
,
createVNode$1
as
createVNode
,
createVueApp
,
customRef
,
defineComponent
,
defineEmits
,
defineExpose
,
defineProps
,
effect
,
effectScope
,
getCurrentInstance
,
getCurrentScope
,
inject
,
injectHook
,
isInSSRComponentSetup
,
isProxy
,
isReactive
,
isReadonly
,
isRef
,
logError
,
markRaw
,
mergeDefaults
,
mergeProps
,
nextTick
,
onActivated
,
onBeforeMount
,
onBeforeUnmount
,
onBeforeUpdate
,
onDeactivated
,
onErrorCaptured
,
onMounted
,
onRenderTracked
,
onRenderTriggered
,
onScopeDispose
,
onUnmounted
,
onUpdated
,
patch
,
provide
,
proxyRefs
,
queuePostFlushCb
,
reactive
,
readonly
,
ref
,
resolveComponent
,
resolveDirective
,
resolveFilter
,
s
etCurrentRenderingInstance
,
s
hallowReactive
,
shallowReadonly
,
shallowRef
,
stop
,
toHandlers
,
toRaw
,
toRef
,
toRefs
,
triggerRef
,
unref
,
useAttrs
,
useSSRContext
,
useSlots
,
version
,
warn$1
as
warn
,
watch
,
watchEffect
,
watchPostEffect
,
watchSyncEffect
,
withAsyncContext
,
withCtx
,
withDefaults
,
withDirectives
,
withModifiers
,
withScopeId
};
packages/uni-mp-vue/src/helpers/withScopedSlot.ts
浏览文件 @
c54d85e1
import
type
{
ComponentInternalInstance
}
from
'
vue
'
//@ts-ignore
import
{
patch
,
getCurrentInstance
}
from
'
vue
'
import
{
patch
,
getCurrentInstance
,
setCurrentRenderingInstance
}
from
'
vue
'
export
interface
ScopedSlotInvokers
{
[
vueId
:
string
]:
ScopedSlotInvoker
...
...
@@ -36,8 +36,8 @@ export function withScopedSlot(
vueId
:
string
}
)
{
fn
.
path
=
path
const
instance
=
getCurrentInstance
()
as
ComponentInternalInstance
fn
.
path
=
path
const
scopedSlots
=
((
instance
as
any
).
$ssi
||
(((
instance
as
any
).
$ssi
as
ScopedSlotInvokers
)
=
{}))
as
ScopedSlotInvokers
const
invoker
=
...
...
@@ -67,7 +67,10 @@ function createScopedSlotInvoker(instance: ComponentInternalInstance) {
// 循环第一个 slot 时,重置 data
slot
.
data
=
{}
}
// 确保当前 slot 的上下文,类似 withCtx
const
prevInstance
=
setCurrentRenderingInstance
(
instance
)
slot
.
data
[
key
]
=
slot
.
fn
(
args
,
key
,
slotName
+
(
hasKey
?
'
-
'
+
key
:
''
))
setCurrentRenderingInstance
(
prevInstance
)
// TODO 简单的 forceUpdate,理论上,可以仅对 scoped slot 部分数据 diff 更新
instance
.
proxy
!
.
$forceUpdate
()
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录