vue学习笔记 九、父子组件实例-基本结构
|
系列导航 | ||
|---|---|---|
一、样例效果图:

父组件:Home 由三个子组件组成分别是:navHeader、navMain、navFooter
要完成的功能说明:
navHeader组件:输入新的任务,点击回车如果新的任务navMain中没有则添加到navMain中。
navMain组件:展示任务,点击“删除按钮”则删除当前任务,多选框可以多选任务。
navFooter组件:记录任务完成的数量(多选框选中为完成)、总数,以及点击“清除已完成”按钮删除navHeader中的已完成任务。
注:本实例先把框架搭建出来,后面会逐步完成描述的功能。
二、项目结构截图

三、代码
Home.vue
<template>
<div>
<nav-header></nav-header>
<nav-main></nav-main>
<nav-footer></nav-footer>
</div>
</template>
<script>
//编写js内容
import NavHeader from '@/components/navHeader/NavHeader.vue'
import NavMain from '@/components/navMain/NavMain.vue'
import NavFooter from '@/components/navFooter/NavFooter.vue'
import {defineComponent} from 'vue'
export default defineComponent({
name:'Home',
components:{
NavHeader,
NavMain,
NavFooter
},
setup(){
}
})
</script>
<style scoped lang="scss">
</style>
NavFooter.vue
<template>
<div >
<div>已完成{{isComplete}} /全部{{all}}</div>
<div v-if="isComplete >0" class="btn">
<button @click="clear">清除已完成</button>
</div>
</div>
</template>
<script>
import {defineComponent,ref} from 'vue'
export default defineComponent({
name:'navFooter',
setup(){
let isComplete = ref(1)
let all =ref(3)
let clear = ()=>{
console.log('clear')
}
return{
isComplete,
all,
clear
}
}
})
</script>
<style scoped lang="scss">
</style>
NavHeader.vue
<template>
<div>
<input
placeholder="请输入任务名称"
v-model="value"
@keydown.enter="enter"
/>
</div>
</template>
<script>
import {defineComponent,ref} from 'vue'
export default defineComponent({
name:'navHeader',
setup(){
let value=ref('')
//按回车确认
let enter = () => {
console.log(value.value)
}
return{
value,
enter
}
}
})
</script>
<style scoped lang="scss">
input{
margin-bottom: 10px;
}
</style>
NavMain.vue
<template>
<div v-for="(item,index) in list" :key ="index">
<div >
<input type="checkbox" v-model="item.complete"/>
{{item.title}}
<button @click="del(item,index)">删除</button>
</div>
</div>
</template>
<script>
import {defineComponent,ref} from 'vue'
export default defineComponent({
name:'navMain',
setup(){
let list =ref([
{
title:'吃饭',
complete:false
},{
title:'睡觉',
complete:false
},{
title:'敲代码',
complete:false
},
])
//删除任务
let del =(item,index)=>{
console.log(item)
console.log(index)
}
return{
list,
del
}
}
})
</script>
<style scoped lang="scss">
</style>
浙公网安备 33010602011771号