mirror of
https://gitee.com/vuejs/vue.git
synced 2024-11-29 18:47:39 +08:00
fix(slots): fix slots not updating when passing down normal slots as $scopedSlots
fix #9699
This commit is contained in:
parent
3433ba5bee
commit
ebc1893fac
@ -10,8 +10,8 @@ export function normalizeScopedSlots (
|
||||
prevSlots?: { [key: string]: Function } | void
|
||||
): any {
|
||||
let res
|
||||
const isStable = slots ? !!slots.$stable : true
|
||||
const hasNormalSlots = Object.keys(normalSlots).length > 0
|
||||
const isStable = slots ? !!slots.$stable : !hasNormalSlots
|
||||
const key = slots && slots.$key
|
||||
if (!slots) {
|
||||
res = {}
|
||||
|
@ -1277,4 +1277,36 @@ describe('Component scoped slot', () => {
|
||||
}).$mount()
|
||||
expect(vm.$el.textContent).toMatch('fallback')
|
||||
})
|
||||
|
||||
// #9699
|
||||
// Component only has normal slots, but is passing down $scopedSlots directly
|
||||
// $scopedSlots should not be marked as stable in this case
|
||||
it('render function passing $scopedSlots w/ normal slots down', done => {
|
||||
const one = {
|
||||
template: `<div><slot name="footer"/></div>`
|
||||
}
|
||||
|
||||
const two = {
|
||||
render(h) {
|
||||
return h(one, {
|
||||
scopedSlots: this.$scopedSlots
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
const vm = new Vue({
|
||||
data: { count: 0 },
|
||||
render(h) {
|
||||
return h(two, [
|
||||
h('span', { slot: 'footer' }, this.count)
|
||||
])
|
||||
}
|
||||
}).$mount()
|
||||
|
||||
expect(vm.$el.textContent).toMatch(`0`)
|
||||
vm.count++
|
||||
waitForUpdate(() => {
|
||||
expect(vm.$el.textContent).toMatch(`1`)
|
||||
}).then(done)
|
||||
})
|
||||
})
|
||||
|
Loading…
Reference in New Issue
Block a user