1234567891011121314151617181920212223242526272829303132333435363738 |
- /* @flow */
- import { extend, warn, isObject } from 'core/util/index'
- /**
- * Runtime helper for rendering <slot>
- */
- export function renderSlot (
- name: string,
- fallback: ?Array<VNode>,
- props: ?Object,
- bindObject: ?Object
- ): ?Array<VNode> {
- const scopedSlotFn = this.$scopedSlots[name]
- let nodes
- if (scopedSlotFn) { // scoped slot
- props = props || {}
- if (bindObject) {
- if (process.env.NODE_ENV !== 'production' && !isObject(bindObject)) {
- warn(
- 'slot v-bind without argument expects an Object',
- this
- )
- }
- props = extend(extend({}, bindObject), props)
- }
- nodes = scopedSlotFn(props) || fallback
- } else {
- nodes = this.$slots[name] || fallback
- }
- const target = props && props.slot
- if (target) {
- return this.$createElement('template', { slot: target }, nodes)
- } else {
- return nodes
- }
- }
|