diff --git a/examples/routers/cascader.vue b/examples/routers/cascader.vue
index 4cf2b22..6f35c63 100644
--- a/examples/routers/cascader.vue
+++ b/examples/routers/cascader.vue
@@ -1,11 +1,19 @@
 <template>
-    <Cascader v-model="value3" :data="data" filterable @on-change="hc"></Cascader>
+    <div style="margin: 100px;width: 300px;">
+        <Cascader v-model="value" :data="data" change-on-select></Cascader>
+    </div>
 </template>
 <script>
     export default {
         data () {
             return {
-                data: [{
+                value: ['beijing', 'gugong'],
+                data: []
+            }
+        },
+        mounted () {
+            setTimeout(() => {
+                this.data = [{
                     value: 'beijing',
                     label: '北京',
                     children: [
@@ -51,14 +59,8 @@
                             ]
                         }
                     ],
-                }],
-                value3: []
-            }
-        },
-        methods: {
-            hc (a,b) {
-                console.log(a,b)
-            }
+                }];
+            }, 100)
         }
     }
 </script>
diff --git a/src/components/cascader/cascader.vue b/src/components/cascader/cascader.vue
index 1d24fd1..ae2810a 100644
--- a/src/components/cascader/cascader.vue
+++ b/src/components/cascader/cascader.vue
@@ -258,8 +258,9 @@
             updateResult (result) {
                 this.tmpSelected = result;
             },
-            updateSelected (init = false) {
-                if (!this.changeOnSelect || init) {
+            updateSelected (init = false, changeOnSelectDataChange = false) {
+                // #2793 changeOnSelectDataChange used for changeOnSelect when data changed and set value
+                if (!this.changeOnSelect || init || changeOnSelectDataChange) {
                     this.broadcast('Caspanel', 'on-find-selected', {
                         value: this.currentValue
                     });
@@ -386,7 +387,7 @@
                     if (validDataStr !== this.validDataStr) {
                         this.validDataStr = validDataStr;
                         if (!this.isLoadedChildren) {
-                            this.$nextTick(() => this.updateSelected());
+                            this.$nextTick(() => this.updateSelected(false, this.changeOnSelect));
                         }
                         this.isLoadedChildren = false;
                     }
--
libgit2 0.21.4