首页 > 其他分享 >Vue - vue 前端开发技术指南

Vue - vue 前端开发技术指南

时间:2024-12-24 18:20:08浏览次数:4  
标签:Vue const value item vue vue3 import 前端开发

以 vite + vue3 + ElementPlus + pinia 开发技术栈所遇到的技术难题及解决方案汇总

如何在 vite+vue3 项目中支持 jsx 技术

  1. 安装插件 pnpm add -D @vitejs/plugin-vue-jsx
  2. 配置 vite.config.js
import vueJsx from '@vitejs/plugin-vue-jsx';
 export default defineConfig({
   plugins: [
     vueJsx(),  // 在vue() 之前
     vue(),
	 ]
 })
  1. 在使用 jsx 语法的组件中设置 lang
<script lang='jsx' setup>
 function formatPlateNumber(row) {
 const colorStyle = PLATE_COLOR[row.plateColor];
 return (
   <div style={colorStyle}>{row.plateNumber}</div>
 );
}
</script>

如何在 vue3 项目中支持 echarts

  1. 安装 echarts pnpm add echarts
  2. 在项目中使用 echarts
// 设置图形挂载点ref
<template>
  <div class="board-item-body" ref="chartRef" v-loading="isLoading"  element-loading-background="rgba(0,0,0,0)">
  </div>
</template>
// 导入echarts
import * as echarts from 'echarts';
const isLoading = ref(false); // 设置图像加载过程指示
const statsData = ref(null); // 统计数据

// 初始化ref
const chartRef = ref();
// 设置图像实例
let chart = null;

// 绘制图表
function renderChart() {
  // 构建图表数据
  const legendData = map(statsData.value, 'overRangeName');
  const seriesData = map(statsData.value, (item) => ({ name: item.overRangeName, value: item.rangeRatio }));
  // 图表参数配置
  const option = {
      legend: {
          orient: 'vertical',
          x: '15%',
          y: 'center',
          textStyle: {
              color: '#E5EFFF',
          },
          data: legendData,
      },
      tooltip: {
          trigger: 'item',
          formatter: (item) => `${item.marker}${item.name}&nbsp;&nbsp;&nbsp;<span style="font-weight: bold;">${item.value}%</span>`,
      },
      series: [
      {
          type: 'pie',
          avoidLabelOverlap: true,
          label: { show: false },
          data: seriesData,
          radius: ['30%', '70%'],
          center: ['70%', '50%'],
      }]
  };

  // 图表容器是否已加载完毕
  if (chartRef) {
      // 首次绘制图表需要进行初始化
      if (!chart) chart = echarts.init(chartRef.value);
      // 设置图表参数更新图表
      chart.setOption(option);
  }
}

// 获取统计数据
function getData(callback) {
  isLoading.value = true;
  overRangeStats({}).then((res) => {
    statsData.value = res.data;
    callback && callback();
  }).finally(() => {
    isLoading.value = false;
  });
}


// 设置图表在页面调整大小时也能够适配调整大小
window.addEventListener('resize', function () {
  chart.resize();
});

// 页面加载后获取图表数据后绘制图表
onMounted(() => {
  getData(renderChart);
});

// 页面卸载后销毁图形实例
onUnmounted(() => {
  chart.dispose();
});

vue3 中引入 dayjs 处理日期时间

  1. 安装 dayjs pnpm add dayjs
  2. 使用 dayjs
  import dayjs from 'dayjs';

vue3 项目中引入 lodash-es 进行数据处理

  1. 安装 lodash-es pnpm add lodash-es
  2. 使用 lodash-es
  import {map} from 'lodash-es';

vue3 页面中监听键盘事件的方法

  1. @keydown.enter 进行事件绑定到回车键
  <el-form-item prop="username">
    <el-input v-model="form.username" :placeholder="t('form.username')" prefix-icon="user" @keydown.enter="doLogin"></el-input>
  </el-form-item>

在vue3中如何引入样式

  1. 在组件的style区域引入
  <style>
    @import "./styles/index.less"
  </style>
  1. 在main.js 中引入
  import "@/styles/index.less";

在vue3 style中如何引入js变量

  1. 使用v-bind(variable) 的形式
<script setup>
  const paddingStyle = props.isFront ? '0!important' : '15px 20px';
  const marginStyle = props.isFront ? '0!important' : '20px';
</script>

<style scoped lang="scss">
  :deep(.cm-table_top__toolbar){
    padding: v-bind(paddingStyle);
    margin-top: v-bind(marginStyle);
  }
</style>

vue3 中 v-loading, 遮罩层变透明的方法加 (element-loading-background="rgba(0,0,0,0)")属性即可。

<template>
  <div class="board-item-body" v-loading="isLoading" element-loading-background="rgba(0,0,0,0)"> </div>
</template>
<script>
  const isLoading = ref(false);
</script>

vue3 中引入element-Plus 图标集

  1. 将图标注册为全局组件Icon,并通过属性icon进行区分, 其优势是可以做到动态图标,通过传入不同的icon属性值可以渲染不同的图标
  • 在main.js 中注册为全局组件, 通过createVNode, h 函数创建vue的虚拟节点
// 导入 element-plus 的图标集
import * as ElIcons from '@element-plus/icons-vue';
// 注册Icon组件
const Icon = (props) => {
  const { icon } = props;
  return createVNode(ElIcons[icon]);
}
app.component('Icon', Icon);
  • 在vue组件中使用
<el-icon :size="25">
  <Icon :icon="weatherName"/>
</el-icon>
  1. 将图标直接注册为全局组件, 其优势是简单明了,但无法在动态场景下使用。
  • 在main.js 进行全局注册
import * as ElIcons from '@element-plus/icons-vue';
// 注册ElIcons为app的子组件
for (const name in ElIcons){
  app.component(name, ElIcons[name]);
}
  • 在vue组件中使用
  <el-icon :size="25">
    <WeatherName />
  </el-icon>

vue3 + Element-plus 项目中 el-select 数据无法正常回显,设定了value值,但不能正常回显label问题

问题原因: 在于设定的value值类型与options选项value值类型不匹配造成的。
解决方案:可以转换options里的value值类型或者设定的value值类型,值类型两者匹配后即可正常回显。

<template>
  <el-form-item prop="status" label="状态">
    <el-select clearable v-model="filters.status" placeholder="全部" style="width: 180px">
      <el-option v-for="item in statusOptions" :label="item.label" :value="item.value" />
    </el-select>
  </el-form-item>
</template>
<script setup>
import { SWITCH_STATUS } from '@/const';
const statusOptions = computed(() =>
  // 将options 中的value值转为数字型
  map(SWITCH_STATUS, (value, key) => ({ label: value, value: Number(key) }))
);
</script>

标签:Vue,const,value,item,vue,vue3,import,前端开发
From: https://www.cnblogs.com/xiaodi-js/p/18627776

相关文章

  • 个人vue组件合集
    1.二维码组件基于qrcode和element-ui开发的二维码组件,qrcode负责渲染,element-ui负责预览展示代码已上传gitee,地址基本使用<el-qrcodevalue='123456'></el-qrcode>参数参数类型说明valueString二维码的值sizeNumber二维码默认展示的尺寸,默认200p......
  • vue-keep-alive的用法
    第一步先在需要保留的组件中添加name属性第二步添加keep-alive这样浏览器会报一个警告建议我们使用插槽方式......
  • vue 登录时的验证码的封装
    <template><divclass="s-canvas"><canvasid="s-canvas":width="contentWidth":height="contentHeight":style={height:codeheight}></canvas></div></template><script>......
  • 基于 Spring Boot、MyBatis Plus、MySQL、HTML、CSS、JavaScript、Vue.js、Redis 与 S
    1.项目概述1.1项目目标为学生提供个性化课程推荐,助力高效选课。构建师生交流社区,促进课程相关交流。实现课程与用户信息的高效管理。1.2功能概述用户管理:包括注册、登录、信息修改、角色管理。课程管理:课程发布、查询、修改、删除、选课操作、评价与推荐。交流社区:课......
  • 企业台账系统|Java|SSM|VUE| 前后端分离
                  【技术栈】1⃣️:架构:B/S、MVC2⃣️:系统环境:Windowsh/Mac3⃣️:开发环境:IDEA、JDK1.8、Maven、Mysql5.7+4⃣️:技术栈:Java、Mysql、SSM、Mybatis-Plus、VUE、jquery,html5⃣️数据库可视化工具:navicat6⃣️服务器:SpringBoot自带apacheto......
  • 宠物用品电子商务系统|Java|SSM|VUE| 前后端分离
                  【技术栈】1⃣️:架构:B/S、MVC2⃣️:系统环境:Windowsh/Mac3⃣️:开发环境:IDEA、JDK1.8、Maven、Mysql5.7+4⃣️:技术栈:Java、Mysql、SSM、Mybatis-Plus、VUE、jquery,html5⃣️数据库可视化工具:navicat6⃣️服务器:SpringBoot自带apacheto......
  • vue中全局使用的方法或者常量,可以挂载到window上面吗?
    在Vue.js应用中,将全局方法或常量挂载到window对象上是一种实现全局访问的方式,但这种方法并不是最佳实践。虽然它确实可以让任何地方都能访问这些方法或常量,但也带来了潜在的风险和问题:挂载到window的优点简单直接:可以直接通过window.methodName或window.constantName......
  • Java+Vue 断点续传功能实现
    实现断点续传功能通常涉及前后端的协同工作。前端负责文件的分片上传和状态管理,后端负责接收文件分片并进行合并。下面是一个简单的示例,展示如何使用Java和Vue来实现断点续传功能。前端(Vue)1.安装依赖首先,确保你的Vue项目中安装了axios用于HTTP请求:npminstallaxios2.......
  • Vue2环境中AntDeisgn1.x的树形下拉选择组件
    示例相关代码<a-tree-select v-model="type" show-search style="width:100%" :dropdown-style="{maxHeight:'400px',overflow:'auto'}" placeholder="请选择" allow-clear ......
  • Java 项目实战:全方位解析基于 Spring Boot、MySQL、FastJSON、MyBatis - Plus、Swagge
    1.引言1.1编写目的本设计文档详细阐述了SNS系统的架构、功能模块、数据结构、接口设计以及系统部署等方面,为系统的开发、测试、维护提供全面的指导,确保项目团队成员对系统有清晰一致的理解,保证系统的顺利实施与迭代优化。1.2适用范围本设计文档适用于SNS系统的开发团队、测试......