Vue学习:20.综合案例-商品列表
学而时用之,方能融会贯通!
实例:商品列表
实现功能
要求表格组件支持动态数据渲染、自定义表头和主体。标签组件需要双击显示输入框并获得焦点,可以编辑标签信息。
思路
首先是表格组件,动态渲染需要使用组件通信-“父传子”;允许自定义可以使用具名插槽;而对于标签组件,可以使用v-if/else和自定义指令v-focus来实现双击显示输入框并自动聚焦,可以使用v-model实现回显标签信息,最后使用“子传父”修改标签信息。
代码
根组件(APP.vue)
<template>
<MyTable :list="list">
<template #head>
<th>编号</th>
<th>图片</th>
<th>名称</th>
<th>标签</th>
</template>
<!-- 插槽作用域 -->
<template #body="{ item, index}">
<td style="width: 100px;">{{ index+1 }}</td>
<td style="width: 200px;">
<img :src="item.photo">
</td>
<td style="width: 300px;">{{ item.name }}</td>
<td>
<MyTage v-model="item.tage"></MyTage>
</td>
</template>
</MyTable>
</template>
<script>
import MyTage from './components/MyTage.vue'
import MyTable from './components/MyTable.vue';
export default {
data(){
return{
list:[
{id:101, photo:'https://img.zcool.cn/community/01811f5abc92fda801218207a45ce8.JPG@1280w_1l_2o_100sh.jpg', name:'缴费部分', tage: '红酒'},
{id:102, photo:'https://img.zcool.cn/community/01811f5abc92fda801218207a45ce8.JPG@1280w_1l_2o_100sh.jpg', name:'缴费部分', tage: '红酒'},
{id:103, photo:'https://img.zcool.cn/community/01811f5abc92fda801218207a45ce8.JPG@1280w_1l_2o_100sh.jpg', name:'缴费部分', tage: '红酒'}
]
}
},
components:{
MyTage,
MyTable
}
}
</script>
<style>
</style>
MyTable组件
<template>
<div>
<table>
<thead>
<tr>
<slot name="head"></slot>
</tr>
</thead>
<tbody>
<tr v-for="(item, index) in list" :key="item.id">
<!-- 插槽作用域-以加属性名的方式传参 -->
<slot name="body" :item="item" :index="index"></slot>
</tr>
</tbody>
</table>
</div>
</template>
<script>
export default {
props:{
list:Array
},
}
</script>
<style scoped>
table{
margin: 20px auto;
border-collapse: collapse;
text-align: center;
}
th,td{
width: 100px;
height: 50px;
line-height: 50px;
border: 2px solid rgb(163, 161, 161);
}
th{
background-color: blue;
color: #fff;
}
img{
width: 100px;
height: 100px;
}
</style>
MyTag组件
<template>
<div>
<input
v-if="isEdit"
v-focus
:value="value"
@blur="isEdit = false"
@keyup.enter="handleEnter"
placeholder="请输入标签">
<!-- 定义双击事件 -->
<p v-else @dblclick="handleEdit">{{value}}</p>
</div>
</template>
<script>
export default {
data(){
return{
isEdit: false
}
},
methods:{
handleEdit(){
this.isEdit = true
},
handleEnter(e){
this.$emit('input',e.target.value)
this.isEdit = false
}
},
props:{
value:String
}
}
</script>
<style>
input,p{
width: 100px;
}
</style>
注意:这个实例中数据来回传递,咋一看好像有点晕,但是当你真正理解了,才会惊叹“牛逼!”
效果图

Vue学习:20.综合案例-商品列表的更多相关文章
- Vue和Element基础使用,综合案例学生列表实现
知识点梳理 课堂讲义 1.Vue 快速入门 1.1.Vue的介绍 Vue是一套构建用户界面的渐进式前端框架. 只关注视图层,并且非常容易学习,还可以很方便的与其它库或已有项目整合. 通过尽可能简单的A ...
- 黑马eesy_15 Vue:04.综合案例(前端Vue实现)
黑马eesy_15 Vue:02.常用语法 黑马eesy_15 Vue:03.生命周期 黑马eesy_15 Vue:04.Vue案例(ssm环境搭建) 黑马eesy_15 Vue:04.综合案例(前端 ...
- Vue学习(五):列表渲染
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- Vue学习之品牌案例部分代码小结(二)
品牌案例的增删查和其他部分效果: <!DOCTYPE html> <html lang="en"> <head> <meta charse ...
- spark SQL学习(综合案例-日志分析)
日志分析 scala> import org.apache.spark.sql.types._ scala> import org.apache.spark.sql.Row scala&g ...
- 好客租房41-react组件基础综合案例-渲染列表数据
1渲染列表 在state定义数据 进行数据渲染 //导入react import React from 'react' import ReactDOM from 'react-dom' //导入组件 ...
- 好客租房42-react组件基础综合案例-渲染列表无数据并优化
渲染列表评论 1判断列表数据的长度是否为0 2如果为0 则渲染暂无评论 //导入react import React from 'react' import ReactDOM from 'react- ...
- 零基础学习java------34---------登录案例,域,jsp(不太懂),查询商品列表案例(jstl标签)
一. 简单登录案例 流程图: 项目结构图 前端代码: <!DOCTYPE html> <html> <head> <meta charset="UT ...
- 5. vue常用高阶函数及综合案例
一. 常用的数组的高阶函数 假设, 现在有一个数组, 我们要对数组做如下一些列操作 1. 找出小于100的数字: 2. 将小于100的数字, 全部乘以2: 3. 在2的基础上, 对所有数求和: 通常我 ...
- 一个ssm综合小案例-商品订单管理-第一天
项目需求分析: 功能需求:登录,商品列表查询,修改 项目环境及技术栈: 项目构成及环境: 本项目采用 maven 构建 环境要求: IDEA Version: 2017.2.5 Tomcat Vers ...
随机推荐
- 微信不再提供小程序打开App?借助H5为App引流的方式你必须知道!
简介: 2021年5月14日App开发者领域发布了一条重要消息:微信开放平台为了提升用户体验,将于2021年5月20日(后来延期到2021年5月27日)起不再提供"小程序打开App技术服务& ...
- 大模型 RAG 是什么
大模型 RAG(Retrieval-Augmented Generation)是一种结合了检索(Retrieval)与生成(Generation)能力的先进人工智能技术,主要用于增强大型语言模型(LL ...
- [Nova] KeyValue Field 设置默认 key 的方式
1. 使用 withMeta: KeyValue::make('options') ->withMeta([ 'value' => $this->options ?? [ 'A' = ...
- S3-FIFO
S3-FIFO 本文作为下一篇缓存文章的预备知识. 背景 基于LRU和FIFO的驱逐 FIFO和LRU都是经典的缓存驱逐算法,在过去几十年中也出现了很多追求更高效率的驱逐算法,如ARC, 2Q, LI ...
- github只下载某个文件或文件夹(使用GitZip插件)
安装GitZip插件 (此安装过程需要梯子(不懂"梯子",百度一下就明白)) 1. 打开插件管理页面 方法一:打开Chrome浏览器(Edge浏览器同理),在Chrom地址栏输入c ...
- 火山引擎VeDI:如何高效使用A/B实验,优化APP推荐系统
更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 在移动互联网飞速发展的时代,用户规模和网络信息量呈现出爆炸式增长,信息过载加大了用户选择的难度,这样的背景下,推荐 ...
- C语言程序设计-笔记6-数组
C语言程序设计-笔记6-数组 例7-1 输出所有大于平均值的数.输入n个整数(1 ),计算这些数的平均值,再输出所有大于平均值的数. #include<stdio.h> int main ...
- 一分钟部署 Llama3 中文大模型,没别的,就是快
前段时间百度创始人李彦宏信誓旦旦地说开源大模型会越来越落后,闭源模型会持续领先.随后小扎同学就给了他当头一棒,向他展示了什么叫做顶级开源大模型. 美国当地时间4月18日,Meta 在官网上发布了两款开 ...
- 一个支持Sora模型文本生成视频的Web客户端
大家好,我是 Java陈序员. 最近 Open AI 又火了一把,其新推出的文本生成视频模型 -- Sora,引起了巨大的关注. Sora 目前仅仅只是发布预告视频,还未开放出具体的 API. 今天, ...
- Linux中的touch命令
Linux中一个文件有3种时间属性,分别是mtime,ctime,atime: modification time (mtime) 当该文件的『内容数据』变更时,就会升级这个时间!内容数据指的是文件的 ...