当前位置: 首页 > article >正文

组件化开发

一、引言

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>


http://www.kler.cn/a/272663.html

相关文章:

  • Redis瓶颈和调优
  • USB 驱动开发 --- Gadget 驱动框架梳理(一)
  • 鸿蒙动态路由实现方案
  • 2025 年 Java 最新学习资料与学习路线——从零基础到高手的成长之路
  • C#表达式和运算符
  • 单元测试与unittest框架
  • 视频桥接芯片#LT8912B适用于MIPIDSI转HDMI+LVDS应用方案,提供技术支持。
  • 算法——贪心
  • 中霖教育好吗?口碑怎么样?
  • JavaWeb:vue、AJax、ELement、maven、SpringBoot、、Http、Tomcat、请求响应、分层解耦
  • Tailwind CSS如何使用
  • 探寻未来之路:计算机行业发展趋势与机遇
  • 可视化搭建一个智慧零售订单平台
  • Android的三种动画详解(帧动画,View动画,属性动画)
  • Java学习30-常用类 Date类
  • 【赠书】从深度学习到图神经网络:模型与实践
  • 基于大语言模型(LLM)的表格理解任务探索与实践
  • 【SpringBoot】请求与响应参数 IoC与DI 总结
  • uniapp开发常用辅助函数mapState、mapMutations和computed来映射vue属性和方法
  • 一些 AI 工具
  • Redis基本使用
  • 算法D48 | 动态规划10 | 121. 买卖股票的最佳时机 122.买卖股票的最佳时机II
  • ThreadX(RTOS)在Ubuntu编译,并执行案例
  • 实时表支持自定义打印,适配又便捷
  • WEB前端 HTML 列表表格
  • SRC实战 | 信息泄露挖掘