Vue封装一个radio组件

我们知道,很多情况下我们会需要单选框,比如说首页导航,可能有[ home , events , messages ]等好几个选项,而我们往往只需要选定一个,每次选择的时候用点击事件控制路由即可,所以这个时候我们需要做一个组件,由于我是基于vue开发的,没有引入jq,主要是 因为我这是个小网站,引入jq有些大材小用了,所以我寻思得做一个vue组件来实现,说是用vue实现,其实大多都还是原生js的代码,下面放代码






我们使用了vue的slot机制,mount的时候初始化所有槽,给其加上单选框子选项的属性

let n = 0;
if(n.toString() === this.defaultValue){
                        node.className += 'nav-link nav-item clickable active';
                        this.currentNode = node;
                    }
                    else
                        node.className += 'nav-link nav-item clickable';
                    n++;

其中n和defaultValue是用来添加默认选项的属性的,给默认值添上一个active的属性
然后给这个dom对象添加上一个监听器,用来处理单选

node.addEventListener('click',(ev) => {
                        if(this.currentNode === ev.srcElement || !this.currentNode){
                            return;
                        }
                        this.currentNode.classList.remove('active');
                        ev.srcElement.classList.add('active');
                        this.currentNode = node;
                    });

如果当前被选中的选项等于我们点击的选项或者我们当前没有选中(也就是没有默认值,算作错误)就直接return,然后给我们要选的选项的classList中添加active值,再移除当前选中选项的active值,最后更换当前选中选项即可

很简单的一个操作,可是一开始我却弄了很久,最后得到这个目前最可行的方案

你可能感兴趣的:(Vue封装一个radio组件)