Forráskód Böngészése

Tooltip: fix content slot, fixed #2999 (#3002)

cinwell.li 8 éve
szülő
commit
1eaec019e3
2 módosított fájl, 9 hozzáadás és 4 törlés
  1. 4 2
      packages/tooltip/src/main.js
  2. 5 2
      src/utils/vdom.js

+ 4 - 2
packages/tooltip/src/main.js

@@ -1,5 +1,6 @@
 import Popper from 'element-ui/src/utils/vue-popper';
 import debounce from 'throttle-debounce/debounce';
+import { getFirstComponentChild } from 'element-ui/src/utils/vdom';
 import Vue from 'vue';
 
 export default {
@@ -65,9 +66,10 @@ export default {
         </div>
       </transition>);
 
-    if (!this.$slots.default) return this.$slots.default;
+    if (!this.$slots.default || !this.$slots.default.length) return this.$slots.default;
 
-    const vnode = this.$slots.default[0];
+    const vnode = getFirstComponentChild(this.$slots.default);
+    if (!vnode) return vnode;
     const data = vnode.data = vnode.data || {};
     const on = vnode.data.on = vnode.data.on || {};
 

+ 5 - 2
src/utils/vdom.js

@@ -1,6 +1,9 @@
 import Vue from 'vue';
 
 export function isVNode(node) {
-  if (!node || typeof node !== 'object') return false;
-  return Vue.util.hasOwn(node, 'tag') && Vue.util.hasOwn(node, 'componentOptions');
+  return typeof node === 'object' && Vue.util.hasOwn(node, 'componentOptions');
+};
+
+export function getFirstComponentChild(children) {
+  return children && children.filter(c => c && c.tag)[0];
 };