vue双向绑定实例应用记录

vue双向绑定一般是用在向数据库写数据,或修改数据的时候,使用vue的数据双向绑定可以大大简化前端代码量,让页面看起来更加简洁,更容易维护。下面就用实际开发中的一个实例来讲解一下vue的双向绑定:

实例是新增一个保险方案,其中包含一个客户信息和多个被保险人信息,被保险人信息要实现动态的 增 、删、 改,这样看来使用vue的动态双向绑定是最合适不过的了。

其中html代码如下:

<div class="formwrapper" style="padding-top: 0">
            <p class="midtitle">方案信息</p>
            <div class="formbox nomarginbot">
                <dl>
                    <dt>方案名称</dt>
                    <dd><input type="text" placeholder="方案名称" v-model="proname" id="ProgramName"></dd>
                </dl>
            </div>
            <p class="midtitle">客户信息</p>
            <div class="formbox nomarginbot">
                <dl>
                    <dt>客户称呼</dt>
                    <dd><input type="text" placeholder="请输入客户称呼" v-model="customername" id="Name"></dd>
                </dl>
                <dl>
                    <dt>出生日期</dt>
                    <dd><input type="date" placeholder="请选择出生日期" v-model="customerbirthday" id="Birthday"></dd>
                </dl>
                <dl>
                    <dt>性别</dt>
                    <dd>
                        <select name="Sex" id="Sex" v-model="customersex" class="{c999: customersex==-1}">
                            <option value="-1" disabled style="display: none;">请选择性别</option>
                            <option value="0">男</option>
                            <option value="1">女</option>
                        </select>
                    </dd>
                </dl>
            </div>
            <p class="midtitle">被保险人信息</p>
            <div class="insuredinfo" v-for="(item,index) in insuredinfo">
                <div class="formbox nomarginbot">
                    <dl v-if="item.relationship != 7">
                        <dt>是客户的</dt>
                        <dd>
                            <select name="relationship" id="relationship" value="-1" v-model="item.relationship" class="{c999: item.relationship==-1}">
                                <option value="-1" disabled style="display: none;">请选择与客户关系</option>
                                <option value="0">自己</option>
                                <option value="1">丈夫</option>
                                <option value="2">妻子</option>
                                <option value="3">父亲</option>
                                <option value="4">母亲</option>
                                <option value="5">儿子</option>
                                <option value="6">女儿</option>
                                <option value="7">自定义称呼</option>
                            </select>
                        </dd>
                    </dl>
                    <dl v-if="item.relationship == 7">
                        <dt>被保险人称呼</dt>
                        <dd><input type="text" placeholder="请输入被保险人称呼" v-model="item.name" id="InsuredName"></dd>
                    </dl>
                    <dl v-if="item.relationship != -1 && item.relationship != 0">
                        <dt>出生日期</dt>
                        <dd><input type="date" placeholder="请选择出生日期" v-model="item.birthday" id="InsuredBirth"></dd>
                    </dl>
                    <dl v-if="item.relationship == 7">
                        <dt>性别</dt>
                        <dd>
                            <select name="InsuredSex" id="InsuredSex" v-model="item.sex" class="{c999: item.sex==-1}">
                                <option value="-1" disabled style="display: none;">请选择性别</option>
                                <option value="0">男</option>
                                <option value="1">女</option>
                            </select>
                        </dd>
                    </dl>
                </div>
                <p v-if="index != 0" class="deleteinsbtn" v-on:click="deleteinsured(index)"><span>删除被保险人</span></p>
            </div>
            <div class="addinsured" v-on:click="addinsured">
                <i class="iconfont icon-tianjiabeibaoxianren"></i>新增被保险人
            </div>
        </div>
        <div class="blockbtnwrap">
            <a href="javascript:;" onclick="addProgram()" class="btn btn-block btn-org">确定</a>
        </div>

js代码如下:

<script type="text/javascript">

        var fadata = new Vue({
            el: "#fainfo",
            data: {
                proname: '',
                customername: '',
                customerbirthday: '',
                customersex: '-1',
                insuredinfo: [{
                    relationship: -1,
                    birthday: '',
                    name: '',
                    sex: -1,
                }]

            },
            methods: {
                deleteinsured: function (index) {
                    this.insuredinfo.splice(index, 1);
                    
                },
                addinsured: function () {
                    var obj = {
                        relationship: -1,
                        birthday: '',
                        name: '',
                        sex: -1
                    };
                    this.insuredinfo.push(obj);

                }
            }
        })

        function addProgram() {
            var ProgramName = $('#ProgramName').val().trim();
            if (ProgramName == "") {
                layer.msg("方案名称不能为空");
                return;
            }
            var Name = $('#Name').val().trim();
            if (Name == "") {
                layer.msg("客户称呼不能为空");
                return;
            }
            var Birthday = $('#Birthday').val().trim();
            if (Birthday == "") {
                layer.msg("请选择出生日期");
                return;
            }
            var Sex = $('#Sex').val();
            if (Sex == null || Sex == "-1") {
                layer.msg("请选择性别");
                return;
            }

            $('.insuredinfo').each(function (i) {
                var that = this;

                var relationship = $(that).find('#relationship').val();
                var InsuredName = $(that).find('#InsuredName').val();
                var InsuredBirth = $(that).find('#InsuredBirth').val();
                var InsuredSex = $(that).find('#InsuredSex').val();
                if (relationship === null || relationship == "-1") {
                    layer.msg("请选择客户关系");
                    return;
                } else if (relationship == "7" || relationship == undefined) {
                    if (InsuredName == "") {
                        layer.msg("请输入被保险人称呼");
                        return;
                    }
                    if (InsuredBirth == "") {
                        layer.msg("请选择被保人出生日期");
                        return;
                    }
                    if (InsuredSex == null || InsuredSex == "-1") {
                        layer.msg("请选择被保人性别");
                        return;
                    }
                } else if (relationship != "0") {
                    if (InsuredBirth == "") {
                        layer.msg("请选择被保人出生日期");
                        return;
                    }
                }

            })

            var insuredinfo = JSON.stringify(fadata.insuredinfo)
            $.ajax({
                url: '/HKBProgram/AddProgramList',
                beforeSend: function () {
                    var index = layer.load(1, {
                        shade: [0.1, '#000'] //0.1透明度的白色背景
                    });
                },
                data: {
                    ProgramName: ProgramName,
                    Name: Name,
                    Birthday: Birthday,
                    Sex: parseInt(Sex),
                    InsuredInfo: fadata.insuredinfo,
                },
                cache: false,
                type: 'Post',
                dataType: 'json',
                success: function (response) {
                    layer.closeAll();
                    if (response == "1") {
                        layer.msg('添加成功!');
                    } else {
                        layer.msg('添加失败!');
                    }
                },
                error: function () {
                    layer.closeAll();
                    layer.msg('系统异常');
                }
            });

        }


    </script>

代码很简单,vue初始化,默认数据data,新增被保险人的时候只需要向insuredinfo数组新增一个对象:

var obj = {
                        relationship: -1,
                        birthday: '',
                        name: '',
                        sex: -1
                    };
                    this.insuredinfo.push(obj);

删除一个被保险人信息只需要删除insuredinfo数组的当前的对象:

deleteinsured: function (index) {
                    this.insuredinfo.splice(index, 1);                
                },

html代码会自动更新。

当信息输入完成点击确认存入数据库的时候,只需要获取vue里面的data数据就可以了,因为是双向绑定,data里面的数据就是input输入框对应的值,这样一来就免去单独获取每个input输入框的值。

 

我们也可以在浏览器下查看是否是双向绑定:

可以看到,当只有一个被保险人信息的时候insuredinfo数组也只对应当前一个对象

当新增一个被保险人信息以后,insuredinfo数组也对应新增了一个对象

同样,删除一个被保险人信息,insuredinfo数组也会同事删除当前对象

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

YuanlongWang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值