方法一是自己想出来的,方法二来自忘记哪里看到的了

不知道是不是你要的效果:

方法一:利用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>
<span :class="{select:sel[index] == ind}" v-for="(item, ind) in option.items" @click="select(index, ind)">{{item.msg}}</span>
</div>

vue实例:(data中的数据和上面的options一样省略啦)

             data() {
return {
sel: [],
id: [],
               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

vue实现淘宝商品详情页属性选择功能的更多相关文章

  1. 仿京东淘宝商品详情页属性选择js效果

    在网上找了好久发现都不符合要求就自己摸索写了一个,用到了linq.js这个linq to js 扩展,不然用纯JS遍历json查询要死人啊 demo:http://123.207.28.46:8086 ...

  2. 仿淘宝商品详情页上拉弹出新ViewController

    新项目就要开始做了,里面有购物那块,就试着先把淘宝商品详情页的效果做了一下. 1.需求 1.第一次上拉时,A视图拉到一定距离将视图B从底部弹出,A视图也向上 2.显示B视图时下拉时,有刷新效果,之后将 ...

  3. iOS app url scheme跳转到淘宝商品详情页 唤醒app

    最近涉及的一个业务,在app内的一个广告,点击打开webView,加载的是一个淘宝商品详情页,效果是打开该webView自动跳转至淘宝对应的页面,同时在自己的app仍然加载页面,点击评论等也同样能跳转 ...

  4. 第十二篇、OC_仿淘宝商品详情页的翻页

    // // GFBProductViewController.m // elmsc // // Created by MAC on 2016/11/26. // Copyright © 2016年 G ...

  5. android仿京东、淘宝商品详情页上拉查看详情

    话不多说,直接上干货,基本就是一个scrollview中嵌套两个scrollview或者webview;关键点事处理好子scrollview和父scrollview的触摸.滑动事件已达到想要的效果.大 ...

  6. Vue实现仿淘宝商品详情属性选择的功能

    Vue实现仿淘宝商品详情属性选择的功能 先看下效果图:(同个属性内部单选,属性与属性之间可以多选) 主要实现过程: 所使用到的数据类型是(一个大数组里面嵌套了另一个数组)具体格式如下:   attrA ...

  7. 淘宝商品html--网页结构

    淘宝商品html--网页结构 本篇爬虫紧接上一篇关于 泸州老窖 的爬虫随笔: import re import json def get_space_end(level): return ' ' * ...

  8. Android开发案例 - 淘宝商品详情

    所有电商APP的商品详情页面几乎都是和淘宝的一模一样(见下图): 采用上下分页的模式 商品基本参数 & 选购参数在上页展示 商品图文详情等其他信息放在下页展示 知识要点 垂直方向的ViewPa ...

  9. Android开发案例 - 淘宝商品详情【转】

    http://erehmi.cnblogs.com/ 所有电商APP的商品详情页面几乎都是和淘宝的一模一样(见下图): 采用上下分页的模式 商品基本参数 & 选购参数在上页展示 商品图文详情等 ...

随机推荐

  1. DB 查询分析器 6.04 发布 ,本人为之撰写的相关技术文章达78篇

    DB查询分析器 6.04 发布,本人为之撰写的相关技术文章达78篇 中国本土程序员马根峰(CSDN专访马根峰:海量数据处理与分析大师的中国本土程序员 http://www.csdn.net/artic ...

  2. 代理服务器 详解 Apache与Nginx的比较与分析

    正向代理:是一个位于客户端和原始服务器(origin server)之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容 ...

  3. Lambda的使用与实战

    简介 (下面的简介也可以自己百度,一般进来的都是想知道怎么去用,所以这里主要也是重点在用法与实战上) Lambda表达式是Java SE 8中一个重要的新特性.lambda表达式允许你通过表达式来代替 ...

  4. java的hashmap与hashtable说明,简单易理解

    1. HashMap 1) hashmap的数据结构 Hashmap是一个数组和链表的结合体(在数据结构称"链表散列"),如下图示: 当我们往hashmap中put元素的时候,先根 ...

  5. 《java入门第一季》之Random类和获取随机数案例

    /*  * Random:产生随机数的类  *   * 构造方法:  * public Random():没有给种子,用的是默认种子,是当前时间的毫秒值下的随机数,所以会一直变化  * public ...

  6. Zookeeper介绍 Zookeeper搭建 Zookeeper集群搭建

    关键字:分布式 背景         随着互联网技术的高速发展,企业对计算机系统的技术.存储能力要求越来越高,最简单的证明就是出现了一些诸如:高并发.海量存储这样的词汇.在这样的背景 下,单纯依靠少量 ...

  7. RecyclerView+Cardview学习探索

    1.概述 在support-V7包中引入了很多新的M 控件,其中RccyclerView也是其中一员,它的名字来源于它的工作方式:当一个Item被隐藏起来时候并没有被销毁,当建立新的item时候,组件 ...

  8. 【Qt编程】基于Qt的词典开发系列<二>--本地词典的设计

    我设计的词典不仅可以实现在线查单词,而且一个重大特色就是具有丰富的本地词典库:我默认加入了八个类型的词典,如下所示: 由于是本人是通信专业,因此加入了华为通信词典.电子工程词典,又由于我喜爱编程,也加 ...

  9. FFMPEG结构体分析:AVCodec

    注:写了一系列的结构体的分析的文章,在这里列一个列表: FFMPEG结构体分析:AVFrame FFMPEG结构体分析:AVFormatContext FFMPEG结构体分析:AVCodecConte ...

  10. ReentrantReadWriteLock读写锁的使用2

    本文可作为传智播客<张孝祥-Java多线程与并发库高级应用>的学习笔记. 这一节我们做一个缓存系统. 在读本节前 请先阅读 ReentrantReadWriteLock读写锁的使用1 第一 ...