Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[严重BUG] Cascader 动态改变 data 和 model 时, 不能正确显示选中项 #1637

Closed
Baoyx007 opened this issue Aug 17, 2017 · 2 comments

Comments

@Baoyx007
Copy link
Contributor

https://codepen.io/Baoyx007/pen/YxYxzQ

image

看了下源码, 可能是在Caspanel代码里,

下面的82行代码更新了 this.sublist, 但是 watch data 又会把它重置为空.

/* line 82*/
        if (item.children && item.children.length){
                  this.sublist = item.children;
        }
/* line 47 */
        watch: {
            data () {
                this.sublist = [];
            }
        }

导致Caspanel没有子Caspanel. 无法接受下面的广播:

                              this.broadcast('Caspanel', 'on-find-selected', {
                                    value: value
                                });
@icarusion icarusion added the bug label Aug 17, 2017
@icarusion
Copy link
Contributor

试了,并想了一下,这个不算是bug,Vue 的组件都是异步渲染的,所以在改变data后,改变v-model要在nextTick里进行。另,需更新iView到最新版本。
参考代码:

<template>
    <div style="margin: 100px;width: 200px;">
        {{ value }}
        <Cascader v-model="value" :data="data" change-on-select></Cascader>
        <Button @click="change">change</Button>
    </div>
</template>
<script>
    export default {
        data () {
            return {
                value: [],
                data: [{
                    value: 'beijing',
                    label: '北京',
                    children: [
                        {
                            value: 'gugong',
                            label: '故宫'
                        },
                        {
                            value: 'tiantan',
                            label: '天坛'
                        },
                        {
                            value: 'wangfujing',
                            label: '王府井'
                        }
                    ]
                }, {
                    value: 'jiangsu',
                    label: '江苏',
                    children: [
                        {
                            value: 'nanjing',
                            label: '南京',
                            children: [
                                {
                                    value: 'fuzimiao',
                                    label: '夫子庙',
                                }
                            ]
                        },
                        {
                            value: 'suzhou',
                            label: '苏州',
                            children: [
                                {
                                    value: 'zhuozhengyuan',
                                    label: '拙政园',
                                },
                                {
                                    value: 'shizilin',
                                    label: '狮子林',
                                }
                            ]
                        }
                    ],
                }]
            }
        },
        methods: {
            change () {
                this.data = [{
                    value: 'beijing2',
                    label: '北京',
                    children: [
                        {
                            value: 'gugong2',
                            label: '故宫'
                        },
                        {
                            value: 'tiantan2',
                            label: '天坛'
                        },
                        {
                            value: 'wangfujing2',
                            label: '王府井'
                        }
                    ]
                }, {
                    value: 'jiangsu2',
                    label: '江苏',
                    children: [
                        {
                            value: 'nanjing2',
                            label: '南京',
                            children: [
                                {
                                    value: 'fuzimiao2',
                                    label: '夫子庙',
                                }
                            ]
                        },
                        {
                            value: 'suzhou2',
                            label: '苏州',
                            children: [
                                {
                                    value: 'zhuozhengyuan2',
                                    label: '拙政园',
                                },
                                {
                                    value: 'shizilin2',
                                    label: '狮子林',
                                }
                            ]
                        }
                    ],
                }];

                this.$nextTick(() => {
                    this.value = ['beijing2', 'tiantan2'];
                });
            }
        }
    }
</script>

@icarusion icarusion removed the bug label Aug 21, 2017
@chaegumi
Copy link

select组件也存在这样的问题,感觉文档中加一下比较好,没有对vuejs理解很深刻的话,就卡壳了.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants