Просмотр исходного кода

fix: v-bind object should not override props on scopedSlots (#5995)

* v-bind object should not override props on scopedSlots

* Update render-slot.js
AchillesJ 8 лет назад
Родитель
Сommit
458030ae19

+ 1 - 1
src/core/instance/render-helpers/render-slot.js

@@ -15,7 +15,7 @@ export function renderSlot (
   if (scopedSlotFn) { // scoped slot
     props = props || {}
     if (bindObject) {
-      extend(props, bindObject)
+      props = extend(extend({}, bindObject), props)
     }
     return scopedSlotFn(props) || fallback
   } else {

+ 5 - 5
test/unit/features/component/component-scoped-slot.spec.js

@@ -36,7 +36,7 @@ describe('Component scoped slot', () => {
       template: `
         <test ref="test">
           <template scope="props">
-            <span>{{ props.msg }} {{ props.msg2 }}</span>
+            <span>{{ props.msg }} {{ props.msg2 }} {{ props.msg3 }}</span>
           </template>
         </test>
       `,
@@ -45,23 +45,23 @@ describe('Component scoped slot', () => {
           data () {
             return {
               msg: 'hello',
-              obj: { msg2: 'world' }
+              obj: { msg2: 'world', msg3: '.' }
             }
           },
           template: `
             <div>
-              <slot :msg="msg" v-bind="obj"></slot>
+              <slot :msg="msg" v-bind="obj" msg3="!"></slot>
             </div>
           `
         }
       }
     }).$mount()
 
-    expect(vm.$el.innerHTML).toBe('<span>hello world</span>')
+    expect(vm.$el.innerHTML).toBe('<span>hello world !</span>')
     vm.$refs.test.msg = 'bye'
     vm.$refs.test.obj.msg2 = 'bye'
     waitForUpdate(() => {
-      expect(vm.$el.innerHTML).toBe('<span>bye bye</span>')
+      expect(vm.$el.innerHTML).toBe('<span>bye bye !</span>')
     }).then(done)
   })