组件化开发

简介: 组件化开发

一、引言

Vue.js 的组件化开发是其核心特性之一,它允许开发者将复杂的界面拆分为可复用的、独立的、小的组件,从而提高开发效率和代码的可维护性。

二、关键点

       1.组件的定义

在components下创建.vue文件timecard.vue用来编辑内容。

文件创建完毕后,在timecard.vue内编写内容。以演出预告为例,包括演出节目、演出时间、演出状态。

<div class="content">
        <div>演出节目</div>
        <div>演出时间</div>
        <div>演出状态:</div>
    </div>

然后设置该div的样式

.content {
    box-shadow: 1px 1px 1px 1px #ccc;
    width: 300px;
    height: 50px;
    margin: 10px;
    padding: 10px;
    border-radius: 5px;
}

接着设置index.vue,在index.vue中的div设置标题和timecard的内容。同时在script中引入components文件中的timecard.vue。

设置完成后打开终端进入locahost查看

2.组件的传参:

  1.父传子:

  我们在 timecard内传属性name

<TimeCard :name="'张三'"></TimeCard>

然后在timecard中声明一个变量props用definprops来接受这个属性

const props=defineProps({
    name:String
})
console.log(props);

包含两个值,第一个name表示的是属性名,第二个string表示的是属性类型

打开html可以看到name已经被传过来了

接着复制一个更改name的值

接着我们在index.vue中创建一个存放演出数据的数组,然后在timecard标签中循环这个数组

<template>
    <div class="content">
    <div>演出节目:{{ props.title }}</div>
    <div>演出时间:{{ props.start }}~{{ props.end }}</div>
    </div>
</template>
<script setup>
const props = defineProps({
    title: String,
    start: String,
    end: String
})
console.log(props);
</script>
<style scoped>
.content {
    box-shadow: 1px 1px 1px 1px #ccc;
    background-color: #fff;
    width: 300px;
    margin: 10px;
    padding: 10px;
    border-radius: 5px;
}
</style>

引入计算函数和响应对象

import { computed, ref } from 'vue';

声明状态的变量名,然后获取当前时分秒

const date = new Date();
let time = `${date.getHours().toString().padStart(2, '0')}:${date.getMinutes().toString().padStart(2, '0')}:${date.getSeconds().toString().padStart(2, '0')}`

之后根据时间来判断演出状态

let status = computed(() => {
    // 判断演出状态1.未开始 2.进行中 3.已结束
    if(time<props.start){
        return{
            color: '#0000ff',
            msg: '未开始'
        };
    }else{
        if(time<props.end){
            return{
                color: '#00ff00',
                msg: '进行中'
            };
        }else{
            return {
                color: '#aaaaaa',
                msg: '已结束'
            };
        }
    }
})

这样就可以根据首页传来的演出信息来显示演出信息的状态

TimeCard.vue

<template>
    <div class="content" :style="{color: status.color}">
        <div>演出节目:{{ props.title }}</div>
        <div>演出时间:{{ props.start }}~{{ props.end }}</div>
        <div>演出状态:{{ status.msg }}</div>
    </div>
</template>
<script setup>
import { computed, ref } from 'vue';
const props = defineProps({
    title: String,
    start: String,
    end: String,
    status: String
})
const date = new Date();
let time = `${date.getHours().toString().padStart(2, '0')}:${date.getMinutes().toString().padStart(2, '0')}:${date.getSeconds().toString().padStart(2, '0')}`
let status = computed(() => {
    // 判断演出状态1.未开始 2.进行中 3.已结束
    if(time<props.start){
        return{
            color: '#0000ff',
            msg: '未开始'
        };
    }else{
        if(time<props.end){
            return{
                color: '#00ff00',
                msg: '进行中'
            };
        }else{
            return {
                color: '#aaaaaa',
                msg: '已结束'
            };
        }
    }
})
console.log(props);
</script>
<style scoped>
.content {
    box-shadow: 1px 1px 1px 1px #ccc;
    background-color: #fff;
    width: 300px;
    margin: 10px;
    padding: 10px;
    border-radius: 5px;
}
</style>

index.vue

<template>
    <div>
        <h1>index页面</h1>
        <TimeCard v-for="(item, index) in list" :key="index" :title="item.title" :start="item.start" :end="item.end">
        </TimeCard>
    </div>
</template>
<script setup>
import TimeCard from '@/components/TimeCard.vue';
let list = [
    {
        title: "演出一",
        start: '08:00:00',
        end: '09:00:00',
        status:'未开始'
    },
    {
        title: "演出二",
        start: '13:00:00',
        end: '14:00:00',
        status:'进行中'
    },
    {
        title: "演出三",
        start: '16:00:00',
        end: '18:00:00',
        status:'已结束'
    }
]
</script>
<style lang="scss" scoped></style>
相关文章
|
6月前
|
JavaScript 开发者
解释 Vue 的组件化开发模式及其优势。
解释 Vue 的组件化开发模式及其优势。
174 0
|
6月前
|
JavaScript
组件化开发
组件化开发
|
27天前
|
前端开发 JavaScript 物联网
组件化设计适用于哪些场景
【10月更文挑战第22天】组件化设计适用于哪些场景
|
27天前
|
前端开发 JavaScript UED
什么是组件化设计
【10月更文挑战第22天】什么是组件化设计
|
1月前
|
前端开发 安全 测试技术
前端组件化有什么优势?
【10月更文挑战第4天】
34 1
|
1月前
|
前端开发 JavaScript 开发者
深入解析前端开发中的模块化与组件化实践
【10月更文挑战第5天】深入解析前端开发中的模块化与组件化实践
23 1
|
4月前
|
JavaScript API
组件化
【7月更文挑战第13天】 Vue.js组件化是将UI拆分成独立、复用组件的过程,涉及模板、逻辑和样式。通过Vue.extend()创建构造器,然后全局或局部注册组件。使用`&lt;my-cpn&gt;`在模板中插入组件。单文件组件(.vue)结合模板、脚本和样式。父子组件间通过props和$emit通信,提升代码维护性和复用性。Vue.js的组件化开发既高效又灵活。
36 4
|
6月前
|
前端开发 JavaScript
前端组件化开发
前端组件化开发
131 0
|
小程序 开发者
小程序组件化开发
随着小程序的普及,越来越多的开发者开始使用小程序进行开发,而小程序的组件化开发已经成为了一种标配的开发模式。本文将深入介绍小程序组件化开发的相关知识,包括组件的定义、生命周期、通信和使用等方面,帮助大家更好地理解和使用小程序的组件化开发模式。组件是小程序中的一个重要概念,它能够将页面分解成独立的、可复用的部分,以便于开发和维护,组件可以包含一些特定的功能和样式,同时也能够接受外部的数据和事件。在小程序中,组件是通过Component构造函数来定义的。propertiesdata和methods。
148 0
|
开发框架 JavaScript 前端开发
前端工程化中重要概念之组件化开发框架
前端工程化中的组件化开发框架是一种重要的开发方式,它可以大幅提高前端开发效率和代码质量。本篇文章将介绍组件化开发框架的基本概念、原理和应用。
254 0
下一篇
无影云桌面