From 3e4bab965551fd54537576fff6d7ae8deeb11daa Mon Sep 17 00:00:00 2001
From: 梁灏 <admin@aresn.com>
Date: Tue, 18 Jul 2017 17:58:45 +0800
Subject: [PATCH] Dropdown add transfer prop

---
 examples/components/test.vue         | 16 +++++++++++++---
 examples/routers/dropdown.vue        | 81 +++++++++++++++++++++++----------------------------------------------------------
 src/components/dropdown/dropdown.vue | 27 ++++++++++++++++++++-------
 3 files changed, 56 insertions(+), 68 deletions(-)

diff --git a/examples/components/test.vue b/examples/components/test.vue
index f2da902..6451c2a 100644
--- a/examples/components/test.vue
+++ b/examples/components/test.vue
@@ -1,7 +1,17 @@
 <template>
-    <Poptip trigger="hover" title="提示标题" :transfer="true" placement="left" content="提示内容">
-        <Button>hover 激活</Button>
-    </Poptip>
+    <Dropdown transfer>
+        <a href="javascript:void(0)">
+            下拉菜单
+            <Icon type="arrow-down-b"></Icon>
+        </a>
+        <Dropdown-menu slot="list">
+            <Dropdown-item>驴打滚</Dropdown-item>
+            <Dropdown-item>炸酱面</Dropdown-item>
+            <Dropdown-item disabled>豆汁儿</Dropdown-item>
+            <Dropdown-item>冰糖葫芦</Dropdown-item>
+            <Dropdown-item divided>北京烤鸭</Dropdown-item>
+        </Dropdown-menu>
+    </Dropdown>
 </template>
 <script>
     export default {
diff --git a/examples/routers/dropdown.vue b/examples/routers/dropdown.vue
index 832f72b..7d44f49 100644
--- a/examples/routers/dropdown.vue
+++ b/examples/routers/dropdown.vue
@@ -1,64 +1,29 @@
-<!--<template>-->
-    <!--<Row>-->
-        <!--<i-col span="8">-->
-            <!--<Card>-->
-                <!--<Dropdown @on-click="handleClick">-->
-                    <!--<a href="javascript:void(0)">-->
-                        <!--下拉菜单-->
-                        <!--<Icon type="arrow-down-b"></Icon>-->
-                    <!--</a>-->
-                    <!--<Dropdown-menu slot="list">-->
-                        <!--<Dropdown-item name="1">驴打滚</Dropdown-item>-->
-                        <!--<Dropdown-item name="2">炸酱面</Dropdown-item>-->
-                        <!--<Dropdown-item name="3" disabled>豆汁儿</Dropdown-item>-->
-                        <!--<Dropdown-item name="4">冰糖葫芦</Dropdown-item>-->
-                        <!--<Dropdown-item name="5" divided>北京烤鸭</Dropdown-item>-->
-                    <!--</Dropdown-menu>-->
-                <!--</Dropdown>-->
-            <!--</Card>-->
-        <!--</i-col>-->
-    <!--</Row>-->
-<!--</template>-->
-<!--<script>-->
-    <!--export default {-->
-        <!--methods: {-->
-            <!--handleClick (val) {-->
-                <!--console.log(val)-->
-            <!--}-->
-        <!--}-->
-    <!--}-->
-<!--</script>-->
-
 <template>
-    <Table border :context="self" :columns="columns7" :data="data6"></Table>
+    <Dropdown transfer>
+        <a href="javascript:void(0)">
+            北京小吃
+            <Icon type="arrow-down-b"></Icon>
+        </a>
+        <Dropdown-menu slot="list">
+            <Dropdown-item>驴打滚</Dropdown-item>
+            <Dropdown-item>炸酱面</Dropdown-item>
+            <Dropdown-item>豆汁儿</Dropdown-item>
+            <Dropdown placement="right-start" transfer>
+                <Dropdown-item>
+                    北京烤鸭
+                    <Icon type="ios-arrow-right"></Icon>
+                </Dropdown-item>
+                <Dropdown-menu slot="list">
+                    <Dropdown-item>挂炉烤鸭</Dropdown-item>
+                    <Dropdown-item>焖炉烤鸭</Dropdown-item>
+                </Dropdown-menu>
+            </Dropdown>
+            <Dropdown-item>冰糖葫芦</Dropdown-item>
+        </Dropdown-menu>
+    </Dropdown>
 </template>
 <script>
     export default {
-        data () {
-            return {
-                self: this,
-                columns7: [
-                    {
-                        title: '姓名',
-                        key: 'name',
-                        render (row, column, index) {
-                            return `<Dropdown @on-click="change"><a href="javascript:void(0)">下拉菜单<Icon type="arrow-down-b"></Icon></a><Dropdown-menu slot="list"><Dropdown-item name="1">驴打滚</Dropdown-item><Dropdown-item name="2">炸酱面</Dropdown-item><Dropdown-item disabled name="3">豆汁儿</Dropdown-item><Dropdown-item>冰糖葫芦</Dropdown-item><Dropdown-item divided>北京烤鸭</Dropdown-item></Dropdown-menu></Dropdown>`;
-                        }
-                    }
-                ],
-                data6: [
-                    {
-                        name: '王小明',
-                        age: 18,
-                        address: '北京市朝阳区芍药居'
-                    }
-                ]
-            }
-        },
-        methods: {
-            change (s) {
-                console.log(s)
-            }
-        }
+
     }
 </script>
diff --git a/src/components/dropdown/dropdown.vue b/src/components/dropdown/dropdown.vue
index 5e331d8..9bb22f2 100644
--- a/src/components/dropdown/dropdown.vue
+++ b/src/components/dropdown/dropdown.vue
@@ -6,20 +6,27 @@
         @mouseleave="handleMouseleave">
         <div :class="[prefixCls + '-rel']" ref="reference" @click="handleClick"><slot></slot></div>
         <transition :name="transition">
-            <Drop v-show="currentVisible" :placement="placement" ref="drop"><slot name="list"></slot></Drop>
+            <Drop
+                v-show="currentVisible"
+                :placement="placement"
+                ref="drop"
+                @mouseenter.native="handleMouseenter"
+                @mouseleave.native="handleMouseleave"
+                v-transfer-dom:forbidden="transfer"><slot name="list"></slot></Drop>
         </transition>
     </div>
 </template>
 <script>
     import Drop from '../select/dropdown.vue';
     import clickoutside from '../../directives/clickoutside';
+    import TransferDom from '../../directives/transfer-dom';
     import { oneOf, findComponentUpward } from '../../utils/assist';
 
     const prefixCls = 'ivu-dropdown';
 
     export default {
         name: 'Dropdown',
-        directives: { clickoutside },
+        directives: { clickoutside, TransferDom },
         components: { Drop },
         props: {
             trigger: {
@@ -37,6 +44,10 @@
             visible: {
                 type: Boolean,
                 default: false
+            },
+            transfer: {
+                type: Boolean,
+                default: false
             }
         },
         computed: {
@@ -76,7 +87,7 @@
                 if (this.trigger !== 'hover') {
                     return false;
                 }
-                clearTimeout(this.timeout);
+                if (this.timeout) clearTimeout(this.timeout);
                 this.timeout = setTimeout(() => {
                     this.currentVisible = true;
                 }, 250);
@@ -86,10 +97,12 @@
                 if (this.trigger !== 'hover') {
                     return false;
                 }
-                clearTimeout(this.timeout);
-                this.timeout = setTimeout(() => {
-                    this.currentVisible = false;
-                }, 150);
+                if (this.timeout) {
+                    clearTimeout(this.timeout);
+                    this.timeout = setTimeout(() => {
+                        this.currentVisible = false;
+                    }, 150);
+                }
             },
             handleClose () {
                 if (this.trigger === 'custom') return false;
--
libgit2 0.21.4