瀏覽代碼

Popover: fix error when reference comes before popover (#10273)

杨奕 7 年之前
父節點
當前提交
1362bae57d
共有 1 個文件被更改,包括 12 次插入3 次删除
  1. 12 3
      packages/popover/src/directive.js

+ 12 - 3
packages/popover/src/directive.js

@@ -1,7 +1,16 @@
+const getReference = (el, binding, vnode) => {
+  const _ref = binding.expression ? binding.value : binding.arg;
+  const popper = vnode.context.$refs[_ref];
+  if (popper) {
+    popper.$refs.reference = el;
+  }
+};
+
 export default {
   bind(el, binding, vnode) {
-    // vue中 v-popover:argument 和 v-popover="variate|| expression"得到的binding数据是不同的。后者可以指向动态popver组件,可以极大的增强popover指令的灵活程度。
-    const _ref = binding.expression ? binding.value : binding.arg;
-    vnode.context.$refs[_ref].$refs.reference = el;
+    getReference(el, binding, vnode);
+  },
+  inserted(el, binding, vnode) {
+    getReference(el, binding, vnode);
   }
 };