javascript - vue 下拉框选择,可赋值,再次选择报错
阿神
阿神 2017-04-11 11:43:54
[JavaScript讨论组]

vue2.0,element ui。下拉选择数据传递问题。
一个简单的城市选择器

组件代码:




父组件代码:

 
  

有一个按钮(点击使用)可点击使用vuex赋值以后

export const getProvinceValue = state => {
    return state.provinceValue
}  
export const setProvinceValue = ({commit}) => {
    commit('SETPROVINCEVAlUE')
}
const mutations = {
    SETPROVINCEVAlUE(state) {
        state.provinceValue = 1
    }
}

可达到效果

问题在于,由于用了

props: ['provinceValue','cityValue']

在父组件再次更改下拉框会报错(我知道报错意思是不要在子组件改变)

简单说,就是下拉框变得无法使用,只能赋值。问题困扰太久,求大神帮助。

阿神
阿神

闭关修行中......

全部回复(2)
高洛峰

props的值不要直接绑定到下拉框,组件渲染的时候取props的值赋值给data中的属性,下拉框的v-model来自于data
你选择下拉框的选项时会去更改props的值,所以会报错;
手机打字不方便,不知道你能不能看懂。
补充说明:当然为了保证外面修改props值的时候,内部的下拉框组件能正确的显示,还需要添加相应的watch,这个不赘述了


// html
v-model="province"
v-model="city"

// js
props: ['provinceValue','cityValue'],
data: function() {
  province: this.provinceValue,
  city: this.cityValue
},
watch: {},

另外你那个change事件用switch…case…真的好么

PHPz

在vue2中严禁子组件直接修改父组件的数据,因为单向数据流。。

可以通过事件通知父组件进行修改,或者,通过回调。我一般用回调。

父组件

<child-comp :afterSelect="handle"></child-comp>

// ...

methods: {
    handle(data) {
        this.data = data
    }
}

在子组件中加change事件,然后直接回掉这个

<template>
    <select :model="selectData" @change="onChange"></select>
</template>
<script>
  export default {
    name: 'childComp',
    data() {
        return {
            selectData: null
        }
    },
    props: ['afterSelect'],
    methods:{
        onChange(ev){
            this.afterSelect(this.selectData)
        }
    }
  }
</script>
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号