vue3+TS的项目记录一

一、defineStore() & pinia 是什么东西

学习过程一:上网搜索

  1. https://pinia.vuejs.org/zh/core-concepts/
    核心概念:
    定义 Store (setup Store,Option Store)
    State:访问state,重置state- $reset(), 变更state- $patch((state)=>{…}),替换state, 订阅state
    Getter
    Action
    插件
    组件外的 Store
    2.[前端开发]Vue3中Pinia的介绍与使用: https://zhuanlan.zhihu.com/p/519634541
    3.一文搞懂pinia状态管理(保姆级教程): https://zhuanlan.zhihu.com/p/533233367
    4.轻松搞定Vue3+Pinia-4-多个store:https://www.jianshu.com/p/2c8409f28a25
    5.Vue中的Pinia状态管理工具 | 一篇文章教会你全部使用细节: https://blog.csdn.net/m0_71485750/article/details/125982691

学习过程二:看书

《循序渐进vue.js3前端开发实战》张益珲著
(vue3+vueX+vue-route+elementPlue+vue-Axios+vue cli+vite)

第十三章 vue状态管理
涉及知识点:状态管理、vuex框架、state状态、getter方法、mutation、action、module
主要学习:

1.vuex框架的安装与简单使用
2.多组件共享状态的管理方法
3.多组件驱动同一状态的方法

摘录:

1.vuex采用集中的方式管理所有组件的状态

学习过程三:项目应用

扩展知识:1. 元组tuple; 2.只读的数组/元组;

// 文件路径 src> store> modules> useEnumDic.ts
import {defineStore} from pinia

export type dicTuple = readonly [number, string];// 这里涉及到 元组tuple 的概念; readonly 
export type EnumDic = dicTuple[];

export const useEnumDicStore = defineStore(
	EnumDic'
	()=> {
		const getDicValue = (key: number, dicet: EnumDic) => {
			const dic = (dicSet. find (item => item[0] = key))
			if (dic) {
				return dic[1]
			} else {
				return  '末定义的枚举项!'
			}
		}
		const getDickey = (val: string, dicset: EnumDic) => {
			const dic = (dicset.find (item => item[1] - val))
			if (dic) (
				return dic[e]
			} else {
				return '末定义的枚举值!'
			}
		}
		const serviceStatusSet: EnumDic = [[0,"等待中"],[1,"处理中"],[2,"运行中"],[3,'关闭'],[4,'异常']];
		const serviceStatusColorSet: EnumDic = [[0,"#ffbfee"],[1,"#0e77d1"],[2,"#bffbf"]];
		const serviceTypeSet: EnumDic = [[0,"TMS"],[1,"WMS"],[2,"巷道"],[3,"WMTS"],[4,"WFS"]];
		const datasourceTypeset: EnumDic = [[0,"CAD"],[1,"SHP"]];
		return { getDicvalue, getDickey, serviceStatusSet, serviceStatusColorSet, serviceTypeSet, datasourceTypeset}
	}
)

在这里插入图片描述

// .vue文件
<template>
	<a-select ref="select" v-model:value="selectServiceType" :options="serviceTypeSet" @change="handleChange"
		:fieldName="{ label:'1', value:'0'}">
	</a-select>
</template>
import { getDicValue , useEnumDicStore } from "@/store/modules/useEnumDic"

setup(){
	const { serviceTypeSet} = useEnumDicStore();
	const typeName = ref<string[]>([]);
	const selectServiceType = ref(4);
	function aaa(){
		res.forEach(ele=>{
			typeName.value.push( getDicValue(ele.type as number, serviceTypeSet) );
		})
	}
	return {
		serviceTypeSet
	}
}

二、组合式API

1. import { reactive, ref, watch } from ‘vue’

const data = reactive<any[]>([]);
 
watch(
	()=>value,
	(newVal,old)=>{
	console.log(newVal,old)
	}
)

https://vue3js.cn/reactivity/reactive.html
vue3保姆级教程
https://cn.vuejs.org/guide/typescript/composition-api.html#typing-component-emits

2.import { toRaw } from ‘vue-router’

3.import { defineComponent, useRouter, PropType } from ‘vue-router’

setup{
	const router = useRouter();
	router.push({ name:"aaa", query:{ id:id.....}})
}

vue路由管理

三、InstanceType

 <change-pwd-form ref="ChangePwdFormRef"></change-pwd-form>
 import ChangePwdForm from './ChangePwdForm.vue'
 
 setup{
  const ChangePwdFormRef = ref<InstanceType<typeof ChangePwdForm> | null>(null);
  //console.log(ChangePwdFormRef);
  return{ ChangePwdFormRef }
 }

1.Vue3+Ts 项目中 定义 ref 实例 的类型:https://juejin.cn/post/6978035248487464974

四、interface 怎么使用

1. 示例1

interface ValueType<T>{
 value: T
}
setup{
   const tableData= reactive<ValueType<CADData[]>>({ value: []})
}

Vue & TypeScript 初体验 - TypeScript中的Interface:https://juejin.cn/post/6844904017957486599

2.示例2

interface Data {
	[key:string]: Array<T>  //这里会提示找不到名称T
}

props:{
	tabledata:{
		type:Array,
		defult:[]
	},
	tablecolumns:{
		type:Array,
		defult:[]
	},
},
setup(props:Data){
	const { tabledata } = toRefs(props)
}

https://www.codenong.com/56835492/

五、input输入框事件

键盘事件
keydown:当用户按下键盘上的任意按键时触发,如果按住不放,会重复触发此事件。
keyup:当用户释放键盘上的按键时触发。

enter回车键:@keyup.enter.native
@mouseover.native
@mouseout.native

六、正则表达式

需求:页面输入关键词,多个关键词用逗号或空格分隔。点击搜索按钮,接口要求 逗号分隔的字符串
在这里插入图片描述

//vue3
//正则 查找字符串中的,和空格 转换成,
const searchString=ref('')
searchString.value.replace(/[\ |\,]/g,',')

\ 空格
\,逗号
| 竖线
\n 换行
.replace(/\r+|\n+/g,‘,’) // 把 所有的回车和换行 转换成 , (逗号) (+代表所有的,去重)
Vue中的正则表达式

七、动态添加行

在这里插入图片描述
第一种方式:表格实现

  <el-table :data="tableData">
     <el-table-column prop="attrname"
                      label="属性">
       <template slot-scope="scope">
         <el-input v-model="scope.row.attrname"
                   size="mini"
                   placeholder="名称" />
       </template>
     </el-table-column>
     <el-table-column prop="attrtype"
                      label="数值类型">
       <template slot-scope="scope">
         <el-select v-model="scope.row.attrtype"
                    placeholder="请选择">
           <el-option v-for="item in attrtypes"
                      :key="item.value"
                      :label="item.name"
                      :value="item.value">
           </el-option>
         </el-select>
       </template>
     </el-table-column>
    <el-table-column>
      <template slot="header"
                slot-scope="scope">
        <el-button type="primary"
                   @click="addField()">新增</el-button>
      </template>
      <el-table-column prop="operate"
                       label="操作">
        <template slot-scope="scope">
          <el-button @click="deleteAttr(scope.$index, tableData)">删除</el-button>
        </template>
      </el-table-column>
    </el-table-column>
  </el-table>
  
  addField: function () {
    var a = {
      'attrname': '名称',
      'attrtype': 'string'
    };
    this.tableData.push(a);
    return;
  },
  deleteAttr: function (index, rows) {
    rows.splice(index, 1);
  }

第二种方式:自定义

<div style="display:flex; flex-direction:column;">
	<template v-for="(item,idx) in dataSource" :key="idx">
		<div style="display:flex;">
		</div>
	</template>
</div>

八、前端拼接&拆分sql语句

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
前端开发是创建WEB页面或APP等前端界面呈现给用户的过程,通过HTML、CSS及JavaScript以及衍生出来的各种技术、框架、解决方案,来实现互联网产品的用户界面交互。 前端开发从网页制作演变而来,名称上有很明显的时代特征。在互联网的演化进程中,网页制作是Web1.0时代的产物,早期网站主要内容都是静态,以图片和文字为主,用户使用网站的行为也以浏览为主。随着互联网技术的发展和HTML5、CSS3的应用,现代网页更加美观,交互效果显著,功能更加强大。 前端开发的流程主要包括: 需求分析:明确网页或应用程序的功能、目标用户、界面风格等。 项目规划:制定详细的项目计划,包括制定项目的时间表、任务分配和前端技术选型等。 设计阶段:进行网页或应用程序的设计工作,包括制定整体布局、设计界面的风格、色彩搭配、字体选用等。 前端开发:根据设计稿进行页面切图,将页面的设计转化为代码,然后使用HTML、CSS和JavaScript等技术语言进行页面的搭建和开发,同时关注页面的交互效果、动画效果等。 前端测试:测试页面的兼容性、响应式布局、用户体验等方面。 上线发布:经过测试确认无误后,将网站或应用程序上线发布。 在前端开发中,会涉及到一些重要的前端技术栈,如vue.js、react.js、node.js、前端安全、react-native等。同时,也需要借助一些工具,如代码编辑工具(WebStorm、VS Code)、代码版本控制工具(Git、SVN)、代码包管理工具(npm、Yarn)、前端构建工具(Webpack、Vite)等,来提升开发效率和质量。 总的来说,前端开发是一个不断发展与进步的领域,随着新的样式解决方案和组件库的不断涌现,以及前端框架的不断更新和演进,前端开发的技术栈和工具链也在不断完善和丰富。未来,前端社区将继续充满朝气与活力,为互联网产品的用户界面交互带来更多的创新和突破。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值