vue实现淘宝商品详情页属性选择功能
方法一是自己想出来的,方法二来自忘记哪里看到的了
不知道是不是你要的效果:
方法一:利用input[type="radio"]
css代码:
input { display: none; } input[type="radio"]+label { /* 默认label的样式 */ /* content: "\a0"; */ display: inline-block; padding: 10px 20px; background-color: #666; margin-left: 20px; color: #fff; border-radius: 10px; } input[type="radio"]:checked+label { /* 当点击label的时候背景颜色发生改变 */ background-color: aqua; } .row { display: inline-block; }
html:
<div v-for="(option, index) in options"> <p>{{option.name}}</p> <div class="row" v-for="(item, ind) in option.items" @click="select(index, ind)"> <input type="radio" :name="index" :id="item.id" value=""> <!-- 关键在于name这里设为index,让每一行选项的name一样,属性id和label的for属性一致 --> <label :for="item.id">{{item.msg}}</label> </div> </div>
vue实例:
data() { return { id: ['', '', ''], options: [{ items: [{ 'msg': '绿色', "id": "11" }, { 'msg': "红色", "id": "12" }], name: "颜色" }, { items: [{ 'msg': "XXX", "id": "13" }, { 'msg': "L", "id": "14" }, { 'msg': "XXL", "id": "15" }], name: "型号" }, { items: [{ 'msg': "32G", "id": "16" }, { 'msg': "8G", "id": "17" }, { 'msg': "4G", "id": "18" }], name: "版本" }] } }, methods: { select(index, ind) { var itemId = this.options[index].items[ind].id; //获取选中的id号 this.id.splice(index, 1, itemId); //替换数组id[]中对应的元素,获得所有选中的id console.log(this.id); } }
方法二:利用数组(把每一行当做数组第几个位置eg:a[1]相当于这个数组里的1,每行内选择的元素的索引为数组对应位置的元素值eg:a[1] = xx相当于这里的xx)
css代码:
span { display: inline-block; padding: 10px 20px; background-color: #666; margin-left: 20px; color: #fff; border-radius: 10px; } .select { background-color: aqua; } .row { display: inline-block; }
html代码:
<div v-for="(option, index) in options"> <p>{{option.name}}</p> {{item.msg}} </div>
vue实例:(data中的数据和上面的options一样省略啦)
data() { return { sel: [], id: [],<br /> options: [], } }, methods: { select: function(index, ind) { this.sel[index] = ind; //让数组sel的第index+1的元素的值等于ind this.sel = this.sel.concat([]); //因为数组是引用类型,对其中一个变量直接赋值不会影响到另一个变量(并未操作引用的对象),使用concat(操作了应用对象) this.id[index] = this.options[index].items[ind].id; //获取选中的id this.id = this.id.concat([]); console.log(this.id); } }
注意:方法二中的vue实例方法中说到引用类型,推荐看:https://www.cnblogs.com/gromimiss/p/6066268.html
相关推荐
yuzhu 2020-11-16
85477104 2020-11-17
KANSYOUKYOU 2020-11-16
sjcheck 2020-11-03
怪我瞎 2020-10-28
源码zanqunet 2020-10-28
gloria0 2020-10-26
王军强 2020-10-21
学习web前端 2020-09-28
QiaoranC 2020-09-25
anchongnanzi 2020-09-21
安卓猴 2020-09-12
Macuroon 2020-09-11
kiven 2020-09-11
LittleCoder 2020-09-11
Cheetahcubs 2020-09-13
小焊猪web前端 2020-09-10
颤抖吧腿子 2020-09-04
softwear 2020-08-21