2
0
Эх сурвалжийг харах

should not keep slot name when passed further down (fix #3259)

Evan You 10 жил өмнө
parent
commit
d0482a0fae

+ 2 - 1
src/core/instance/render.js

@@ -167,7 +167,8 @@ function resolveSlots (
   let name, child
   for (let i = 0, l = children.length; i < l; i++) {
     child = children[i]
-    if ((name = child.data && child.data.slot)) {
+    if (child.data && (name = child.data.slot)) {
+      delete child.data.slot
       const slot = (slots[name] || (slots[name] = []))
       if (child.tag === 'template') {
         slot.push.apply(slot, child.children)

+ 18 - 0
test/unit/features/component/component-slot.spec.js

@@ -312,4 +312,22 @@ describe('Component slot', () => {
     }).$mount()
     expect('Render function should return a single root node').toHaveBeenWarned()
   })
+
+  it('should not keep slot name when passed further down', () => {
+    const vm = new Vue({
+      template: '<test><span slot="foo">foo<span></test>',
+      components: {
+        test: {
+          template: '<child><slot name="foo"></slot></child>',
+          components: {
+            child: {
+              template: '<div><div class="default"><slot></slot></div><div class="named"><slot name="foo"></slot></div></div>'
+            }
+          }
+        }
+      }
+    }).$mount()
+    expect(vm.$el.querySelector('.default').textContent).toBe('foo')
+    expect(vm.$el.querySelector('.named').textContent).toBe('')
+  })
 })