Vue3 递归组件 全选或者全不选 重命名组件(不修改文件名称)
2023-09-27 14:27:48 时间
新建Tree.ts
export interface Tree {
name: string,
children?: Tree[],
checked: boolean
}
这是递归的结构。
新建 Tree.vue 这个是递归组件
<template>
<div v-for="item in data" class="treeVue">
<input type="checkbox"
:checked="item.checked"
@click.stop="clickTap(item)"
>
<!-- @change="item.checked = !item.checked"-->
<span>{{ item.name }}</span>
<!-- 对组件进行递归-->
<TreeVue1 :data="item.children" v-if="item.children && item.children.length > 0"/>
</div>
</template>
<script lang="ts" setup>
import {Tree} from "../ts/Tree";
defineProps<{
data?: Tree[]
}>()
const clickTap = (item: Tree) => {
const newStats= !item.checked
//遍历item 点击全选或者全部取消
const check = (item: Tree) => {
item.checked = newStats
if (item.children && item.children.length > 0) {
item.children.forEach((item) => {
check(item)
})
}
}
check(item)
}
</script>
<!--如果想重命名 可以新建一个script 如下-->
<script lang="ts">
export default {
name: "TreeVue1",
}
</script>
<style lang="less" scoped>
.treeVue {
padding-left: 20px;
}
</style>
准备好数据 这是App.vue
<template>
<TreeVue :data="data" />
</template>
<style scoped>
#app, html, body {
height: 100%;
}
* {
padding: 0;
margin: 0;
}
</style>
<script setup lang="ts">
import {reactive} from "vue";
import TreeVue from "./components/TreeVue.vue";
import {Tree} from "./ts/Tree";
const data = reactive<Tree[]>([
{
name: "1", checked: false, children: [
{
name: "1-1", checked: false, children: [
{name: "1-1-1", checked: false},
{name: "1-1-2", checked: false},
{name: "1-1-3", checked: false},
]
},
{name: "1-2", checked: false},
{
name: "1-3", checked: false, children: [
{name: "1-3-1", checked: false},
{name: "1-3-2", checked: false},
{name: "1-3-3", checked: false},
]
},
]
},
])
</script>
效果 当选中的时候就全选。否者就全不选
相关文章
- 【Vue3】通过Teleport实现子组件div显示在整个页面中
- 【Vue和Vue3+vite】通过脚手架配置代理实现axios跨域与第三方后台数据传递(图文+代码示例)
- vue3简单封装一个下拉框选项组件
- vue3 setup 语法糖下的路由守卫 beforeRouteEnter 用法示例
- vue3组件间怎么通信?简述一下通信方式
- 浅析Vue3动态组件怎么进行异常处理
- antd vue3 图片 手动上传
- 02. Vue3 绑定事件的方式
- VUE3实用组件开发合集一:数字滚动组件
- vue3组合API(setup函数,系列二)
- Vue3 axios 同步获取
- 15.0 vue3 provide&inject跨组件通信方式