vue组件表单数据回显验证及提交代码

21 篇文章 0 订阅

最近项目需要到vue开发单页面,所以就研究一下表单数据的回显,验证及提交如何用vue组件的方式实现。

这里写图片描述

代码如下:

<template>
    <div class="index">
        <!--header-bar></header-bar-->
        <div style="margin:20px;">
            <div class="item">
                <p>住户名称:</p>
                <p>
                    <input type="text" value="username" v-model="formStatus.username" placeholder="输入名称">
                </p>
            </div>
            <div class="item">
                <p>住户类型:</p>
                <p>
                    <label v-for="(item, index) in zhuhuType">
                        <span>{{item.name}}</span>
                        <input type="radio" name = "zhuhutype" :value="item.id" :checked="item.isChecked" @click="changeZh(index)" v-model="formStatus.zhuhuType">
                    </label>
                </p>
            </div>
            <div class="item">
                <p>设备名称:</p>
                <p>
                    <label v-for="(item, index) in shebeiType">
                        <span>{{item.name}}</span>
                        <input type="checkbox" :value="item.id" :checked="item.isChecked" @click="changeSb(index)" v-model="formStatus.shebeiType">
                    </label>
                </p>
            </div>
            <div class="item">
                <p>住户大小:</p>
                <p>
                    <select v-model="formStatus.zhuhudaxiao">
                        <option value="0">请选择</option>
                        <option v-for="option in zhuhudaxiao" v-model="zhuhudaxiao" :id = "option.id" :value="option.value" >{{option.name}}</option>
                    </select>
                </p>
            </div>
            <div class="item">
                <p>住户留言:</p>
                <p>
                    <textarea value="userword" v-model="formStatus.userword"></textarea>
                </p>
            </div>
        
        </div>
        <p style="margin:20px 0;"><button @click="save">点击保存</button></p>
    </div>
</template>
<script>
    import Vue from 'vue'
    import axios from 'axios';
    import ElementUI from 'element-ui'
    import URL from '../utils/Tools/URL.js'
    import 'element-ui/lib/theme-chalk/index.css'
    Vue.use(ElementUI)
    import headerBar from '../modules/headerBar.vue';
    export default {
        name: 'index',
        data (){
            return {
                zhuhuType: [],
                shebeiType: [],
                zhuhudaxiao: [],
                //绑定改变后的表单值用于提交
                formStatus: {
                    username: "",
                    zhuhuType: 43,
                    shebeiType: [52, 23],
                    zhuhudaxiao: "",
                    userword: ""
                }
            }
        },
        components: { headerBar },
        methods: {
            getPage (currentPage){
                console.log(currentPage);
                // this.$http.get("http://192.168.1.200/test.php").then(res=>{
                //     console.log(res.data);
                // });
            },
            handleEdit(index, row) {
                console.log(index, row);
            },
            handleDelete(index, row) {
                console.log(index, row);
            },
            save(){
                if(this.formStatus.username == ""){
                    alert("输入名称");
                    return false;
                }
                console.log(typeof(this.formStatus.zhuhuType));
                if(typeof(parseInt(this.formStatus.zhuhuType)) != "number"){
                    alert("输入住户类型");
                    return false;
                }
                if(this.formStatus.shebeiType.length == 0 ){
                    alert("输入设备名称");
                    return false;
                }
                if(this.formStatus.zhuhudaxiao == 0){
                    alert("选择住户大小");
                    return false;
                }
                if(this.formStatus.userword == ""){
                    alert("输入用户留言");
                    return false;
                }

                console.log(this.formStatus);
                console.log("####用户名称####");
                console.log(this.formStatus.username);

                console.log("####住户类型####");
                console.log(this.zhuhuType);

                console.log("####设备名称####");
                console.log(this.shebeiType);

                console.log("####住户大小####");
                console.log(this.userDxselected);

                console.log("####用户留言####");
                console.log(this.userword);
            },
            //住户类型改变数据
            changeZh(index){
                this.zhuhuType.forEach(function(value, index){
                    value.isChecked = false;
                });
                this.zhuhuType[index].isChecked = true;
            },
            //设备选择改变数据
            changeSb(index){
                console.log(index);
                this.shebeiType[index].isChecked = !this.shebeiType[index].isChecked;
            }
        },
        created () {
            console.log("############");
            //用户名称
            this.formStatus.username = "用户名称返回的内容";

            //循环住户类型
            this.zhuhuType = [{
                name: '小型住户',
                id: '12',
                isChecked: false
            },{
                name: '中型住户',
                id: '43',
                isChecked: false
            },{
                name: '大型住户',
                id: '72',
                isChecked: true
            },{
                name: '超大型住户',
                name: '设备6',
                id: '25',
                isChecked: false
            }];

            //循环设备名称
            this.shebeiType = [{
                name: '设备1',
                id: '22',
                isChecked: true
            },{
                name: '设备2',
                id: '23',
                isChecked: false
            },{
                name: '设备3',
                id: '52',
                isChecked: true
            },{
                name: '设备6',
                id: '65',
                isChecked: false
            }];
            
            //住户大小
            this.zhuhudaxiao = [{
                name: "100平米",
                id: 1,
                value: 1
            },{
                name: "80平米",
                id: 2,
                value: 2
            },{
                name: "70平米",
                id: 3,
                value: 3
            }];

            //住户大小
            this.formStatus.zhuhudaxiao = 2;
            //用户名称
            this.formStatus.userword = "用户留言返回的内容";
            // axios.get("/test.php").then(res=>{
            //     this.table = this.table.concat(res.data.data);
               
            //     console.log(res.data);
            // });
        }
    }
</script>
<style>
    select{height:40px;width:100px;}
    .el-button--mini, .el-button--mini.is-round{}
    *{margin:0;padding:0;font-family:"微软雅黑";}
    button{height:40px;width:100px;margin-left:20px;}
    .item p{padding:10px 0;}
    .table, .page{
        width:900px;
        height:auto;
        margin:20px auto;
    }
    label{
        padding:10px 20px;
        margin:10px;
        border:1px solid #eee;
    }
    body{padding-top:80px;}
    .header{
        position:fixed;
        top:0;
        width:100%;
        background:#eee;
    }
    .header ul{
        height:80px;
        width:1000px;
    }
    .header ul li{
        float:left;
        width:200px;
        font-size:14px;
        line-height:80px;
        text-align:Center;
    }
    .header ul li a{
        display:block;
    }

</style>
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Vue3中实现表单数据回显的方法有多种。其中一种常见的方法是使用响应式数据。您可以将表单数据保存在一个响应式对象中,然后在组件中使用这些数据进行回显。 首先,您需要在组件中定义一个响应式对象,来保存表单数据。可以使用`reactive`函数来创建一个响应式对象。例如,在Vue3中,您可以这样定义一个响应式对象: ``` const state = reactive({ remark: '', dictId: 0, dictName: '', dictType: '', status: '0', }); ``` 接下来,您可以通过将表单数据传递给组件的props属性来实现数据回显。当父组件传递新的表单数据时,您可以使用`watch`函数来监听这些数据的变化,并更新响应式对象的值。例如,在Vue3中,您可以这样实现表单数据回显: ``` watch(() => formData, (value) => { state.remark = value.remark; state.dictId = value.dictId; state.dictName = value.dictName; state.dictType = value.dictType; state.status = value.status; }, { immediate: true, deep: true }); ``` 最后,您可以在模板中使用这些响应式数据回显表单数据。例如,在Vue3中,您可以这样使用响应式数据回显表单数据: ``` <template> <div> <label>Remark:</label> <input v-model="state.remark" /> <label>Dict ID:</label> <input v-model="state.dictId" /> <label>Dict Name:</label> <input v-model="state.dictName" /> <label>Dict Type:</label> <input v-model="state.dictType" /> <label>Status:</label> <input v-model="state.status" /> </div> </template> ``` 通过这种方式,您可以将父组件传递的表单数据回显到子组件的输入框中。请注意,上述代码仅为示例代码,具体实现可能会根据您的项目需求而有所不同。希望对您有所帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值