IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> VUE封装radio组件 -> 正文阅读

[JavaScript知识库]VUE封装radio组件

1、radio子组件

<template>
    <div class="radio-group">
        <div v-for="(item, index) in options" :key="index" class="radio-link">
            <div class="radio-list">
                <div class="radio-area">
                    <label>
                        <span>
                            <input type="radio"
                                    :value="typeof item == 'string' ? item : item.value"
                                    class="radio-input"
                                    v-model="selectedValue"
                                    :disabled="typeof item == 'string' ? false : item.disabled == true ? true :false">
                            <span class="radio-select"
                                    :class="typeof item == 'string' ? '' : item.disabled == true ? 'radio-select-disabled' : '' "></span>
                        </span>
                        <span class="selectListItem">{{typeof item == 'string' ? item : item.label}}</span>
                    </label>
                </div>
            </div>
        </div>
    </div>
</template>

<script>
export default {
    name: "radio",
    data () {
        return {
            selectedValue: ''
        }
    },
    props: {
        value: {
            type: String,
            default: ''
        },
        options: {
            type: Array,
            default: []
        }
    },
    created () {
        if (typeof (this.options) == 'string') {
            this.options = eval("(" + this.options + ")");
        }
        console.log(this.selectedValue,'aaa')
    },
    mounted() {
        this.selectedValue = this.value;
    },
    watch: {
        selectedValue () {
            this.$emit('input', this.selectedValue)
        }
    }
}
</script>
<style lang="less" scoped>
.radio-group{
    display: flex;
    .radio-link {
        box-sizing: border-box;
        color: inherit;
        min-height: 40px;
        display: block;
        overflow: hidden;
        position: relative;
        text-decoration: none;
    }
    .radio-list {
        height: 0.96rem;
        line-height: 0.96rem;
        width: 100%;
        padding: 0rem 0.2rem;
        box-sizing: border-box;
    }
    .radio-area,
    .radio-area label {
        height: 0.96rem;
        width: 100%;
        display: block;
    }
    .radio-input {
        display: none;
    }
    .radio-select {
        box-sizing: border-box;
        display: inline-block;
        background-color: #fff;
        border-radius: 100%;
        border: 1px solid #ccc;
        position: relative;
        width: 20px;
        height: 20px;
        vertical-align: middle;
    }
    .radio-select-disabled {
        background-color: #d9d9d9;
        border-color: #ccc;
    }
    .radio-input:checked + .radio-select {
        background-color: #26a2ff;
        border-color: #26a2ff;
    }
    .radio-input:checked + .radio-select::after {
        background-color: #fff;
        -webkit-transform: scale(1);
        transform: scale(1);
    }
    .radio-select::after {
        content: ' ';
        border-radius: 100%;
        top: 5px;
        left: 5px;
        position: absolute;
        width: 8px;
        height: 8px;
        -webkit-transition: -webkit-transform 0.2s;
        transition: -webkit-transform 0.2s;
        transition: transform 0.2s;
        transition: transform 0.2s, -webkit-transform 0.2s;
        -webkit-transform: scale(0);
        transform: scale(0);
    }

    .selectListItem {
        font-size: 0.3rem;
        vertical-align: middle;
        margin-left: 6px;
    }
}

</style>

2、父组件引用

<Radio :value="productTypeVal"  v-model="productTypeVal" :options="productTypeList" ></Radio>

data数据

productTypeList: [
       {
            label: '不限',
            value: '1',
       }, {
            label: '理财',
            value: '2',
       }
 ],
productTypeVal: '1',

  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2022-03-31 23:55:34  更:2022-03-31 23:58:31 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 4:53:25-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码