From a5aaf2371b7895fd9844157ff9c031fbfa168efe Mon Sep 17 00:00:00 2001 From: jamone- Date: Wed, 4 Oct 2017 12:10:19 +0200 Subject: [PATCH 1/4] fix(slot): add v-bind warning v-bind with not object warning 6677 --- src/core/instance/render-helpers/render-slot.js | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/core/instance/render-helpers/render-slot.js b/src/core/instance/render-helpers/render-slot.js index 3eaff882522..0495c04a4c2 100644 --- a/src/core/instance/render-helpers/render-slot.js +++ b/src/core/instance/render-helpers/render-slot.js @@ -1,6 +1,6 @@ /* @flow */ -import { extend, warn } from 'core/util/index' +import { extend, warn, isObject } from 'core/util/index' /** * Runtime helper for rendering @@ -15,6 +15,12 @@ export function renderSlot ( if (scopedSlotFn) { // scoped slot props = props || {} if (bindObject) { + if (!isObject(bindObject)) { + process.env.NODE_ENV !== 'production' && warn( + 'slot v-bind without argument expects an Object', + this + ) + } props = extend(extend({}, bindObject), props) } return scopedSlotFn(props) || fallback From c00c6a1a0598547cd74312a241b28d65c7949baf Mon Sep 17 00:00:00 2001 From: Dominik Rabij Date: Wed, 4 Oct 2017 15:55:22 +0200 Subject: [PATCH 2/4] refactor(slot): move condition to if statement --- src/core/instance/render-helpers/render-slot.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/core/instance/render-helpers/render-slot.js b/src/core/instance/render-helpers/render-slot.js index 0495c04a4c2..292c434e6f2 100644 --- a/src/core/instance/render-helpers/render-slot.js +++ b/src/core/instance/render-helpers/render-slot.js @@ -15,8 +15,8 @@ export function renderSlot ( if (scopedSlotFn) { // scoped slot props = props || {} if (bindObject) { - if (!isObject(bindObject)) { - process.env.NODE_ENV !== 'production' && warn( + if (!isObject(bindObject) && process.env.NODE_ENV !== 'production') { + warn( 'slot v-bind without argument expects an Object', this ) From 21d29a6ee5f8fc97b4ff2b59830b57ef8b5b4a3f Mon Sep 17 00:00:00 2001 From: Dominik Rabij Date: Wed, 4 Oct 2017 22:03:43 +0200 Subject: [PATCH 3/4] test(slot): add warning tests when using v-bind --- .../component/component-scoped-slot.spec.js | 54 +++++++++++++++++++ 1 file changed, 54 insertions(+) diff --git a/test/unit/features/component/component-scoped-slot.spec.js b/test/unit/features/component/component-scoped-slot.spec.js index 0a7923d9938..2dd28382696 100644 --- a/test/unit/features/component/component-scoped-slot.spec.js +++ b/test/unit/features/component/component-scoped-slot.spec.js @@ -65,6 +65,60 @@ describe('Component scoped slot', () => { }).then(done) }) + it('should warn when using v-bind with no object', () => { + new Vue({ + template: ` + + + + `, + components: { + test: { + data () { + return { + text: 'some text' + } + }, + template: ` +
+ +
+ ` + } + } + }).$mount() + expect('slot v-bind without argument expects an Object').toHaveBeenWarned() + }) + + it('should not warn when using v-bind with object', () => { + new Vue({ + template: ` + + + + `, + components: { + test: { + data () { + return { + foo: { + text: 'some text' + } + } + }, + template: ` +
+ +
+ ` + } + } + }).$mount() + expect('slot v-bind without argument expects an Object').not.toHaveBeenWarned() + }) + it('template slot', done => { const vm = new Vue({ template: ` From d305a2a9a8ed78b86433e841d3aa5d4abf471b27 Mon Sep 17 00:00:00 2001 From: Evan You Date: Fri, 6 Oct 2017 15:39:27 -0400 Subject: [PATCH 4/4] Update render-slot.js --- src/core/instance/render-helpers/render-slot.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/core/instance/render-helpers/render-slot.js b/src/core/instance/render-helpers/render-slot.js index 292c434e6f2..1a194c579e3 100644 --- a/src/core/instance/render-helpers/render-slot.js +++ b/src/core/instance/render-helpers/render-slot.js @@ -15,7 +15,7 @@ export function renderSlot ( if (scopedSlotFn) { // scoped slot props = props || {} if (bindObject) { - if (!isObject(bindObject) && process.env.NODE_ENV !== 'production') { + if (process.env.NODE_ENV !== 'production' && !isObject(bindObject)) { warn( 'slot v-bind without argument expects an Object', this