ele-h5项目使用vue3+vite开发:第一节、页面头部实现

news2025/2/4 12:55:31

实现页面

确认需求

  • 顶部提示栏
  • 搜索框
  • 搜索提示

normalize.css:处理不同浏览器的默认样式

安装

  • npm i normalize.css

使用

src\App.vue


<style scoped>
@import 'normalize.css';

#app {
    /** 让字体抗锯齿,看起来更清晰 */
    -webkit-font-smoothing: antialiased;
    -moz-osx-font-smoothing: grayscale;
}
</style>

sass: CSS 预处理器

安装

  • npm i sass -D

使用


<style lang="scss" scoped>
.home-top {
  background: linear-gradient(to right, rgb(53, 200, 250), rgb(31, 175, 243));
  color: white;
  .top {
    display: flex;
    align-items: center; // 垂直居中
    padding: 10px 10px 0 10px;
    line-height: 15px;
    font-size: 15px;
    font-weight: bold;
    .location-icon {
      width: 24px;
      height: 24px;
    }
    .location {
      flex: 1;
    }
    .shopcart-icon {
      width: 24px;
      height: 24px;
    }
    .comments-icon {
      width: 28px;
      height: 24px;
      margin-left: 10px;
    }
  }
  .search-recomment {
    display: flex;
    padding: 0 10px 10px;
    .tag {
      font-size: 12px;
      border-radius: 10px;
      background: rgb(242, 242, 242, 0.3);
      padding: 2px 8px;
      margin-right: 10px;
    }
  }
}
</style>

如何使用图片

配置

  • 在vite.config.ts配置文件中配置
  • 
    import path from 'path'
    
    const resolve = (dir: string) => path.join(__dirname, dir)
    
    export default defineConfig({
    
      resolve: {
        alias: {
          '@': resolve('src')
        }
      }
    
    })
    

使用


<template>
  <div class="home-top">
    <div class="top">
      <img class="location-icon" src="@/assets/imgs/index_page/location.png" />
      <div class="location">幸福小区(东南门)</div>
      <img class="shopcart-icon" src="@/assets/imgs/index_page/shopcart.png" />
      <img class="comments-icon" src="@/assets/imgs/index_page/comments.png" />
    </div>
    <VanSearch
      shape="round"
      background="linear-gradient(to right, rgb(53,200,250), rgb(31,175,243))"
      placeholder="世界茶饮 35减2"
    >
      <template #right-icon>
        <div>搜索</div>
      </template>
    </VanSearch>
    <div class="search-recomment">
      <div v-for="v in recomments" :key="v.value" class="tag">{{ v.label }}</div>
    </div>
  </div>
</template>

封装 TheTop 组件

创建组件

  • 在src\views\tabs\home目录下创建components文件夹
  • 在文件夹中创建TheTop.vue组件
  • <script setup lang="ts">
    import type { ISearchRecomment } from '@/types'
    interface IProps {
      recomments: ISearchRecomment[]
    }
    
    defineProps<IProps>()
    </script>
    
    <template>
      <div class="home-top">
        <div class="top">
          <img class="location-icon" src="@/assets/imgs/index_page/location.png" />
          <div class="location">幸福小区(东南门)</div>
          <img class="shopcart-icon" src="@/assets/imgs/index_page/shopcart.png" />
          <img class="comments-icon" src="@/assets/imgs/index_page/comments.png" />
        </div>
        <VanSearch
          shape="round"
          background="linear-gradient(to right, rgb(53,200,250), rgb(31,175,243))"
          placeholder="世界茶饮 35减2"
        >
          <template #right-icon>
            <div>搜索</div>
          </template>
        </VanSearch>
        <div class="search-recomment">
          <div v-for="v in recomments" :key="v.value" class="tag">{{ v.label }}</div>
        </div>
      </div>
    </template>
    
    <style lang="scss" scoped>
    .home-top {
      background: linear-gradient(to right, rgb(53, 200, 250), rgb(31, 175, 243));
      color: white;
      .top {
        display: flex;
        align-items: center; // 垂直居中
        padding: 10px 10px 0 10px;
        line-height: 15px;
        font-size: 15px;
        font-weight: bold;
        .location-icon {
          width: 24px;
          height: 24px;
        }
        .location {
          flex: 1;
        }
        .shopcart-icon {
          width: 24px;
          height: 24px;
        }
        .comments-icon {
          width: 28px;
          height: 24px;
          margin-left: 10px;
        }
      }
      .search-recomment {
        display: flex;
        padding: 0 10px 10px;
        .tag {
          font-size: 12px;
          border-radius: 10px;
          background: rgb(242, 242, 242, 0.3);
          padding: 2px 8px;
          margin-right: 10px;
        }
      }
    }
    </style>
    
    <style lang="scss">
    .home-top {
      .van-field__right-icon {
        margin-right: 0;
      }
    }
    </style>
    

使用组件

在src\views\tabs\home\HomeView.vue文件中使用

<script setup lang="ts">
// 导入组件
import TheTop from './components/TheTop.vue'

const recomments = [
  { value: 1, label: '牛腩' },
  { value: 2, label: '红烧肉' },
  { value: 3, label: '宫保鸡丁' }
]
</script>

<template>
  <div class="home-page">
// 引用组件
    <TheTop :recomments="recomments" />
  </div>
</template>

<style>
.test {
  font-size: 39px;
}
</style>

使用 VanSearch 组件

配置

  • 在src\main.ts注册引入组件
  • // 全局注册引入组件
    import { Tabbar, TabbarItem, Search } from 'vant'
    app.use(Tabbar)
    app.use(TabbarItem)
    app.use(Search)

使用

<template>
  <div class="home-top">
    <div class="top">
      <img class="location-icon" src="@/assets/imgs/index_page/location.png" />
      <div class="location">幸福小区(东南门)</div>
      <img class="shopcart-icon" src="@/assets/imgs/index_page/shopcart.png" />
      <img class="comments-icon" src="@/assets/imgs/index_page/comments.png" />
    </div>

    <VanSearch
      shape="round"
      background="linear-gradient(to right, rgb(53,200,250), rgb(31,175,243))"
      placeholder="世界茶饮 35减2"
    >
      <template #right-icon>
        <div>搜索</div>
      </template>
    </VanSearch>

    <div class="search-recomment">
      <div v-for="v in recomments" :key="v.value" class="tag">{{ v.label }}</div>
    </div>
  </div>
</template>

使用 defineProps

定义

  • defineProps函数允许我们定义一个组件的属性。这个函数可以在组件内部使用,用于声明组件所接收的属性,并指定它们的类型、默认值等信息。

使用

<script setup lang="ts">
import type { ISearchRecomment } from '@/types'
interface IProps {
  recomments: ISearchRecomment[]
}


defineProps<IProps>()


</script>

<template>
  <div class="home-top">
    <div class="top">
      <img class="location-icon" src="@/assets/imgs/index_page/location.png" />
      <div class="location">幸福小区(东南门)</div>
      <img class="shopcart-icon" src="@/assets/imgs/index_page/shopcart.png" />
      <img class="comments-icon" src="@/assets/imgs/index_page/comments.png" />
    </div>
    <VanSearch
      shape="round"
      background="linear-gradient(to right, rgb(53,200,250), rgb(31,175,243))"
      placeholder="世界茶饮 35减2"
    >
      <template #right-icon>
        <div>搜索</div>
      </template>
    </VanSearch>
    <div class="search-recomment">

      <div v-for="v in recomments" :key="v.value" class="tag">{{ v.label }}</div>


    </div>
  </div>
</template>

定义组件的 Props

定义

  • 在Vue中,通过定义组件的props选项来声明组件的属性。属性是从父组件传递给子组件的数据,通过属性可以实现父子组件之间的通信。
  • 在Vue 3中,可以使用defineProps函数来定义组件的属性。
  • 无论是使用defineProps函数还是直接在props选项中定义属性,都可以通过父组件传递数据给子组件的方式来使用这些属性。

使用

  • 例如,在父组件中使用子组件并传递属性:
<script setup lang="ts">
import TheTop from './components/TheTop.vue'

const recomments = [
  { value: 1, label: '牛腩' },
  { value: 2, label: '红烧肉' },
  { value: 3, label: '宫保鸡丁' }
]
</script>

<template>
  <div class="home-page">

    <TheTop :recomments="recomments" />

  </div>
</template>

<style>
.test {
  font-size: 39px;
}
</style>
  • 在子组件中,我们可以通过props/defineProps对象来访问这些属性,并且引入:
<script setup lang="ts">
import type { ISearchRecomment } from '@/types'
interface IProps {
  recomments: ISearchRecomment[]
}

defineProps<IProps>()

</script>

<template>
  <div class="home-top">
    <div class="top">
      <img class="location-icon" src="@/assets/imgs/index_page/location.png" />
      <div class="location">幸福小区(东南门)</div>
      <img class="shopcart-icon" src="@/assets/imgs/index_page/shopcart.png" />
      <img class="comments-icon" src="@/assets/imgs/index_page/comments.png" />
    </div>
    <VanSearch
      shape="round"
      background="linear-gradient(to right, rgb(53,200,250), rgb(31,175,243))"
      placeholder="世界茶饮 35减2"
    >
      <template #right-icon>
        <div>搜索</div>
      </template>
    </VanSearch>
    <div class="search-recomment">

      <div v-for="v in recomments" :key="v.value" class="tag">{{ v.label }}</div>

    </div>
  </div>
</template>

声明 Props 的类型文件

声明

  • 使用defineProps<IProps>()来声明组件的属性。这会将IProps中定义的属性作为组件的属性,并提供类型检查和类型提示。

使用

<script setup lang="ts">
import type { ISearchRecomment } from '@/types'
interface IProps {
  recomments: ISearchRecomment[]
}

defineProps<IProps>()
</script>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1427237.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

面试中问到的算法题。————目录树生成

前言 我在面试中遇到了算法题&#xff0c;也是我第一次面试&#xff0c;也不知道是太紧张了还是太久没刷算法题了&#xff0c;感觉压有点懵的状态&#xff0c;所以当时面试的时候没有做出来或者说只做了一半没有做完。 面试完成后&#xff0c;我又重新审视了一下题目&#xff…

【送书福利-第三十一期】《区块链安全理论与实践(安全技术经典译丛)》

&#x1f60e; 作者介绍&#xff1a;我是程序员洲洲&#xff0c;一个热爱写作的非著名程序员。CSDN全栈优质领域创作者、华为云博客社区云享专家、阿里云博客社区专家博主、前后端开发、人工智能研究生。公粽号&#xff1a;程序员洲洲。 &#x1f388; 本文专栏&#xff1a;本文…

Xline Jepsen 测试分析

Table of Contents 摘要背景介绍 XlineJepsen CheckersNemesisJepsen 测试设计 数据一致性 SerializabilityLinearizabilityStrict SerializabilityJepsen etcd test RegistersSetsAppendWRJepsen Xline test测试结果分析 测试结果异步落盘Revision生成 背景旧的实现分析1-RTT…

九、Qt图表使用

一、QCharts概述 Qt图表提供了&#xff1a;折线图、样条曲线图、面积图、散点图、条形图、饼图、方块胡须图、蜡烛图、极坐标图。1、QChart介绍 Qt Charts基于Qt的QGraphics View架构&#xff0c;其核心组件是QChartView和QChartQChartView是显示图标的视图&#xff0c;基类为…

如何用gpt快速做好数据分析?

由于技术限制&#xff0c;目前InfinitePaper AI仅支持上传1份文件&#xff0c;且大小不超过10M。但是&#xff0c;在强大的代码解释器面前&#xff0c;这都是小问题。我们只需要将可能用到的文件打包成压缩文件上传即可&#xff0c;之后要求GPT直接解压就能正常完成后续需求。 …

Vue学习之使用HBuilderX创建并使用vue3.0项目

Vue学习之使用HBuilderX创建并使用vue3.0项目 下文将简述如何使用HBuilderX创建并使用vue3.0项目&#xff0c;包含项目创建、目录介绍、如何引用组件、首页自定义设置。 1、创建vue3.0项目 具体操作之前章节已经阐述过不在冗余介绍&#xff0c;创建时选择vue3项目即可。vue2…

2023年03月CCF-GESP编程能力等级认证Python编程二级真题解析

Python等级认证GESP(1~6级)全部真题・点这里 一、单选题(共15题,共30分) 第1题 以下存储器中的数据不会受到附近强磁场干扰的是( )。 A:硬盘 B:U 盘 C:内存 D:光盘 答案:D 第2题 下列流程图,属于计算机的哪种程序结构?( ) A:顺序结构 B:循环结构 C:…

《Lua程序设计》-- 学习10

环境&#xff08;Environment&#xff09; 具有动态名称的全局变量 全局变量的声明 由于Lua语言将全局变量存放在一个普通的表中&#xff0c;所以可以通过元表来发现访问不存在全局变量的情况。 正如前面所提到的&#xff0c;我们不允许值为nil的全局变量&#xff0c;因为值为…

C语言·贪吃蛇游戏(上)

1. 游戏任务 使用C语言在Windows环境的控制台中模拟实现小游戏贪吃蛇 游戏中要包含以下功能&#xff1a; 1. 贪吃蛇地图绘制 2. 贪吃蛇上下左右移动和吃食物 3. 蛇撞墙&#xff0c;或撞到自身死亡 4. 计算得分 5. 蛇身加速、减速 6. 暂停游戏 2. Win32 API 介绍 Windows是一种多…

【MATLAB源码-第131期】基于matlab的淘金优化算法(GRO)机器人栅格路径规划,输出做短路径图和适应度曲线。

操作环境&#xff1a; MATLAB 2022a 1、算法描述 淘金优化算法&#xff08;GoldRush Optimizer&#xff0c;简称GRO&#xff09;是一种启发式优化算法&#xff0c;它受到淘金过程的启发。在淘金过程中&#xff0c;淘金者在河流或矿区中寻找金矿&#xff0c;通过筛选沙砾来寻…

病历管理系统

技术架构&#xff1a; StrutsSpringHibernate 有需要该项目的小伙伴可以私信我你的Q。 功能描述&#xff1a; 企业财务管理系统主要用于电子病历来提高医院各项工作的效率和质量&#xff0c;促进医学科研、教学&#xff1b;减轻各类事务性工作的劳动强度&#xff0c;使他们…

2024美赛选题建议+ABCDEF思路分享

选题建议 A题 题目见&#xff1a; https://zxljhy.blog.csdn.net/article/details/135985116https://zxljhy.blog.csdn.net/article/details/135985116建议&#xff1a; A题是机理分析&#xff0c;需要去找到合适的数据对物种发展规律进行研究&#xff0c;结合生态学原理和动…

Windows SDK(三)GDI图形绘制基础

GDI介绍 GDI:图形设备接口&#xff1a;Windows的子系统&#xff0c;负责在视讯显示器和打印机上显示图形。 GDI常见名词解释&#xff1a; 直线 曲线 填入区域&#xff1a;直线或曲线构成的封闭区域&#xff0c;可以用画刷进行填充 位图&#xff1a;点阵图像 文字 映…

DEV-C++ ege.h库 绘图教程合集

一、目录 DEV-C ege.h库 绘图教程&#xff08;一&#xff09;——基本绘图函数 DEV-C ege.h库 绘图教程&#xff08;二&#xff09;——高级绘图函数&#xff08;上&#xff09; DEV-C ege.h库 绘图教程&#xff08;三&#xff09;——高级绘图函数&#xff08;下&#xff09;时…

探索自然语言处理在改善搜索引擎、语音助手和机器翻译中的应用

文章目录 每日一句正能量前言文本分析语音识别机器翻译语义分析自然语言生成情感分析后记 每日一句正能量 努力学习&#xff0c;勤奋工作&#xff0c;让青春更加光彩。 前言 自然语言处理&#xff08;NLP&#xff09;是人工智能领域中与人类语言相关的重要研究方向&#xff0c…

day07-CSS高级

01-定位 作用&#xff1a;灵活的改变盒子在网页中的位置 实现&#xff1a; 1.定位模式&#xff1a;position 2.边偏移&#xff1a;设置盒子的位置 left right top bottom 相对定位 position: relative 特点&#xff1a; 不脱标&#xff0c;占用自己原来位置 显示模…

最长的指定瑕疵度的元音子串 - 华为OD统一考试

OD统一考试&#xff08;C卷&#xff09; 分值&#xff1a; 200分 题解&#xff1a; Java / Python / C 题目描述 开头和结尾都是元音字母&#xff08;aeiouAEIOU&#xff09;的字符串为元音字符串&#xff0c;其中混杂的非元音字母数量为其瑕疵度。比如: “a” 、 “aa” 是元…

视频怎么加水印?分享两个简单的加水印的方法

在数字媒体时代&#xff0c;视频已经成为信息传播的重要方式。许多人在创作视频是会加上自己独特的水印&#xff0c;防止视频被盗用。水印作为数字版权保护技术的一种&#xff0c;可以有效地防止视频被非法复制、传播或篡改&#xff0c;从而保护创作者的权益和利益。下面我分享…

小程序中picker多列选择器

需求&#xff1a;实现类似省市联动的效果&#xff0c;选择第一列后&#xff0c;第二列数据变化 html部分: <view class"section"><view>多列选择器</view><picker mode"multiSelector" bindchange"bindMultiPickerChange"…

动环系统断电告警的防误报

机房一般接入的市电为三相380伏特&#xff0c;也有用单向220伏特的。UPS本身提供断电告警的功能&#xff0c;这个告警在各种种类的UPS中都是提供的&#xff0c;不同电压的市电输入都支持&#xff1b;三相电另外有缺相告警事件。但这些告警事件存在抖动或者误判。 瞬间的低压或…