最近在开发一个流动性能,表单外面有单选框抉择,并且能够勾销抉择,在网上找到了办法并总结了一下,我参考的是这位前辈的代码。上面是我的代码:

<!DOCTYPE html><html><head>    <meta charset="utf-8">    <title>应用element-ui中的el-radio(单选框)组件实现选中和勾销选中性能</title>    <!--引入 element-ui 的款式,-->    <link rel="stylesheet" href="https://unpkg.com/element-ui/lib/theme-chalk/index.css">    <script src="https://cdn.bootcss.com/vue/2.5.16/vue.min.js"></script>    <!-- 引入element 的组件库-->    <script src="https://unpkg.com/element-ui/lib/index.js"></script>    <style>        * {            margin: 0;            padding: 0;        }    </style></head><body>    <div id="app">        <el-button type="primary" @click="isShow = true">请抉择优惠活动</el-button>        <el-dialog title="请抉择优惠活动" :close-on-click-modal="false" :visible.sync="isShow" width="731px">            <div class="model-body">                <el-form ref="form" :model="activityInfo" label-width="80px" label-position="top">                    <el-form-item label="流动1">                        <el-radio-group v-model="activityInfo.radio1" :key="radioKey1">                            <el-radio v-for="item in moneyOffList" :key="item.id" :label="item.id"                                @click.native.prevent="changeRadio(item.id, 1)">{{ item.activityName }}</el-radio>                        </el-radio-group>                    </el-form-item>                    <el-form-item label="流动2">                        <el-radio-group v-model="activityInfo.radio2" :key="radioKey2">                            <el-radio v-for="item in buyPurchaseList" :key="item.id" :label="item.id"                                @click.native.prevent="changeRadio(item.id, 2)">{{ item.activityName }}                            </el-radio>                        </el-radio-group>                    </el-form-item>                    <el-form-item label="流动3">                        <el-radio-group v-model="activityInfo.radio3" :key="radioKey3">                            <el-radio v-for="item in couponList" :key="item.id" :label="item.id"                                @click.native.prevent="changeRadio(item.id, 3)">{{ item.activityName }}</el-radio>                        </el-radio-group>                    </el-form-item>                </el-form>            </div>            <div slot="footer" class="footer">                <!-- 办法返回一个数组, 对象中属性名的汇合 -->                <span class="left1">已选 {{Object.keys(activityInfo).length}} 个流动</span>                <el-button class="cancel-style" size="small" @click="isShow = false">取 消</el-button>                <el-button type="primary" @click="confirmActivit">确 认</el-button>            </div>        </el-dialog>    </div>    <script>        new Vue({            el: '#app',            data() {                return {                    // 显示或暗藏弹层                    isShow: false,                    // form表单                    activityInfo: {},                    // 流动1                    moneyOffList: [],                    // 流动2                    buyPurchaseList: [],                    // 流动3                    couponList: [],                    // 管制单选框点击选中和勾销                    radioKey1: false,                    // 管制单选框点击选中和勾销                    radioKey2: false,                    // 管制单选框点击选中和勾销                    radioKey3: false,                    // 模仿后端返回的数据                    activityList: [                        {                            "activityName": "测试1",                            "marketingType": "1",                            "id": "1564166823610396674",                            "activityType": "5",                        },                        {                            "activityName": "测试2",                            "marketingType": "1",                            "id": "1564190540612743169",                            "activityType": "5",                        },                        {                            "activityName": "测试3",                            "marketingType": "2",                            "id": "1564194283531370497",                            "activityType": "4",                        },                        {                            "activityName": "测试4",                            "marketingType": "2",                            "id": "1564201347171319810",                            "activityType": "4",                        },                        {                            "activityName": "测试5",                            "marketingType": "2",                            "id": "1566712633057349634",                            "activityType": "3",                        },                        {                            "activityName": "测试6",                            "marketingType": "2",                            "id": "1567399000281288706",                            "activityType": "3",                        },                    ],                }            },            mounted() {            },            watch: {                isShow: {                    handler(newName, oldName) {                        if (newName) {                            // 辨别各种流动类型                            this.activityList.forEach(item => {                                if (item.marketingType == 1 && (item.activityType == '1' || item.activityType == '2' || item.activityType == '5')) {                                    this.moneyOffList.push(item)                                } else if (item.marketingType = 2 && item.activityType == '4') {                                    this.buyPurchaseList.push(item)                                } else if (item.marketingType = 2 && item.activityType == '3') {                                    this.couponList.push(item)                                }                            });                        } else {                            // 敞开弹层之后初始化                            this.moneyOffList = [];                            this.buyPurchaseList = [];                            this.couponList = [];                            this.activityInfo = {};                        }                    },                }            },            methods: {                // 点击单选框操作                changeRadio(val, number) {                    // 如果未选中则单选框高亮,否则单选框勾销选中                    this.activityInfo['radio' + number] = this.activityInfo['radio' + number] == val ? '' : val;                    this['radioKey' + number] = !this['radioKey' + number];                    // 去掉空值,删除对象中的某一个属性和属性值                    if (!this.activityInfo['radio' + number]) {                        delete this.activityInfo['radio' + number]                    }                },                // 点击确定发送申请                confirmActivit() {                    // Object.values, 获取对象中的属性值,返回一个数组                    let activityIds = Object.values(this.activityInfo);                    // js中的数组去掉空值(点击单选框的时候曾经做了空值解决,这一步能够不要)                    activityIds = activityIds.filter(function (s) {                        return s && s.trim();                    });                    console.log(activityIds, '传给后端的参数');                }            }        })    </script></body></html>

通过这个需要我学到了单选框勾销选中的办法,学习了vue对对象中的属性动静赋值,学习了Object.keys()办法和Object.values()办法。