练习VUE基础知识点,练习了组件封装,父子组件之间得通信,组件插槽和组件路由,是一个很不错得练习项目

二级路由
组件
配置路由
const routes = [
{
path: '/',
redirect: '/list',
component: () => import('../views/Layout'),
children: [
{
path: 'list',
component: () => import('../views/List'),
},
{
path: 'search',
component: () => import('../views/Search'),
},
{
path: 'my',
component: () => import('../views/My'),
},
],
},
{
path: '*',
component: () => import('../views/NotFound'),
},
]
商品列表
商品搜索
我的信息
创建MyHead.vue组件
TabBar案例
axios 在MyGoodList.vue请求数据回来
下载axios
yarn add axios
MyGoodList.vue
MyTable.vue
#
名称
价格
标签
操作
{{ item.id }}
{{ item.goods_name }}
{{ item.goods_price }}
{{ item.tags }}
删除
使用插槽技术,和作用域插槽技术,给MyTable.vue组件,自定义列标题,自定义表格内容
需求:允许用户自定义表个头和表格单元格内容
步骤:
MyTable.vue
{ item.id }}
{{ item.goods_name }}
{{ item.goods_price }}
{{ item.tags }}
删除
-->
MyGoodList.vue
#
名称
价格
标签
操作
{{ row.id }}
{{ row.goods_name }}
{{ row.goods_price }}
{{ row.tags }}
删除
{{
str
}}
点击删除按钮删除数据
分析:
MyGoodList.vue—注册点击事件
删除
MyGoodList.vue 根据id删除
methods:{
removeBtn(id) {
// 1 根据id查找下标
let index = this.list.findIndex((obj) => obj.id === id)
// 2 实现删除
this.list.splice(index, 1)
},
}
需求:点击tab按钮,出现输入框自动获取焦点,失去焦点关闭输入框,会出新增tag,esc清空内容
tag+
1:监听input的回车事件
2.事件处理函数
// 新增tag
enterFn(row) {
// console.log(row, 0)
// 非空判断
if (row.inputValue.trim().length === 0) {
return alert('请输入数据')
}
// 添加
row.tags.push(row.inputValue)
row.inputValue = ''
},
@keydown.esc="row.inputValue = ''"
附带项目原码:
https://download.csdn.net/download/idiot_MAN/86726354