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 ...
随机推荐
- Flink 在 58 同城的应用与实践
简介: 58 同城的实时 SQL 建设以及如何从 Storm 迁移至 Flink. 本文整理自 58 同城实时计算平台负责人冯海涛在 Flink Forward Asia 2020 分享的议题< ...
- 在 UOS 统信运行 dotnet 程序提示没有通过系统安全验证无法运行
本文记录 dotnet 应用程序在 UOS 统信系统上运行时,提示 没有通过系统安全验证,无法运行 的问题 这个问题是因为没有开启 UOS 统信的开发者模式,直接将自己构建完成的包放上去跑导致的问题 ...
- WPF 警惕使用 Dispatcher.InvokeShutdown 方法退出应用 将不触发 Application.Exit 事件
这是一个比较让人困惑的一个点,我一直都以为 Dispatcher.InvokeShutdown 和 Application.Current.Shutdown 是完全等价的.但是后面发现了其实这两者还是 ...
- FPGA最大工作频率教程
FPGA最大工作频率教程 1. Quartus的时序分析 作为编译过程的一部分,Quartus对布局布线的电路做时序分析.在编译报告里,展开"Timing Analyzer",这 ...
- Codeforces Good Bye 2023
A. 2023 正常签到. void solve() { int n, k, ok = 1; cin >> n >> k; int t = 2023; while(n --) ...
- 通过虚拟机镜像部署zabbix
前言 由于基础镜像的缘故,zabbix部署过程中很可能出现各种缺少依赖包的情况,如果环境中又无法连接互联网,系统部署会非常麻烦.为此zabbix官方提供了虚拟机镜像,导入后可以直接在平台上拉起虚拟机, ...
- MySQL 数据库重置密码
1.Linux 中 MySQL 数据库重置密码 停止服务:systemctl stop mysql 打开 my.cnf(没有则创建一个):vim /etc/my.cnf 在 [mysqld] 下添加: ...
- Sermant在异地多活场景下的实践
本文分享自华为云社区<Sermant在异地多活场景下的实践>,作者:华为云开源. Sermant社区在1.3.0和1.4.0版本相继推出了消息队列禁止消费插件和数据库禁写插件,分别用于解决 ...
- 04. C语言数据使用方式
[C语言简介] 计算机的运行由CPU指令控制,为了让计算机执行指定功能,需要将这些功能对应的指令数据集中存储在一起,制作为一个计算机文件,这个文件称为程序,CPU通过读取程序中的指令确定要执行的功能, ...
- 如果win报错无法加载文件 C:\Users\xx\AppData\Roaming\npm\pnpm.ps1,因为在此系统上禁止运行脚本
点击查看代码 Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass