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

中国建设银行宁夏分行网站免费域名注册查询入口

中国建设银行宁夏分行网站,免费域名注册查询入口,有关网站建设新闻资讯,做视频网站多少钱学习关键语句: 饿了么组件dialog组件使用 dialog组件二次封装 vue3中封住的组件使用update触发更新 vue3中封装组件使用v-model:属性值来传值 写在前面 这是我遇到的一个页面需求 , 其中一个对话框的内容是很常用的 , 所以我将它封装出来才写的一篇文章 现在给出如下需求: 封…学习关键语句: 饿了么组件dialog组件使用 dialog组件二次封装 vue3中封住的组件使用update触发更新 vue3中封装组件使用v-model:属性值来传值 写在前面 这是我遇到的一个页面需求 , 其中一个对话框的内容是很常用的 , 所以我将它封装出来才写的一篇文章 现在给出如下需求: 封装一个组件 , 要求每次选择用户的时候 , 能从组件返回选择的用户id数组 并且能在选择用户是看到选择了哪些用户 如果你只是想看如何封装组件 , 请根据目录点击 ‘封装对话框组件’ 这个内容 文章末尾附带本文项目文件链接 开始 提示 : 本项目使用 vite 创建的 vue3 项目 , 使用 express 创建的后端 创建项目文件夹 随意新建一个文件夹 , 起名为 test , 在该文件夹下 , 再新建一个文件夹为 server 开启终端 , 输入创建项目命令 npm create vite依次输入项目名称 dialog , 框架选择 Vue , 语言选择 typescript 创建完成后 , 根据提示 输入提示的命令 cd dialog npm install npm run dev点击打开最后这个网址就完成了项目最初的创建 现在我们来创建后端服务器 打开终端 , 进入 server 文件夹 , 输入以下命令 npm init测试使用 , 全部按回车默认过去就OK了 命令行中安装依赖 npm install同时我们再创建一个文件 起名为 app.js 全部创建完后的目录如下 安装库和配置 现在需要在前端和后端中各安装需要的库 其中 , 前端需要安装 elementUI 和 axios 后端需要安装 express , cors , body-parser 和 connect-multiparty 注意 安装依赖前请确定在对的终端下 , 不可下错了位置 后端 优先进行后端的配置 安装 express 制作服务器 npm install express --save安装 cors 解决跨域 npm install cors --save引入中间件解决读取参数问题 npm install body-parser --savenpm install connect-multiparty --save配置完成之后我们来写服务器文件 app.js app.js // 导入 express const express require(express) // 创建 app const app express() // 设置跨域访问 const cors require(cors) app.use(cors()) // 处理POST参数 const bodyParser require(body-parser) const multiparty require(connect-multiparty) // 处理 x-www-form-urlencoded app.use(bodyParser.urlencoded({extended:true })); // 处理 application/json app.use(bodyParser.json()) // 处理 mutipart/form-data app.use(multiparty())// 测试接口能否正常调用 app.get(/hello, (req, res) {res.send(Hello shaoyahu !) })// 我们写一个获取用户信息的接口 // 模拟数据库中的用户数据 let db [{ id: 1, name: 张一 },{ id: 2, name: 张二 },{ id: 3, name: 张三 },{ id: 4, name: 熊大 },{ id: 5, name: 熊二 },{ id: 6, name: 熊三 },{ id: 7, name: 李三 },{ id: 8, name: 李四 }, ] app.post(/getUserData, (req, res) {let txt req.body.namelet data db.filter(item {return item.name.includes(txt)})res.send({status: 200,data,msg: 获取成功}) })// 启动 app.listen(3000, () {console.log(express server running at http://127.0.0.1: 3000); })写好服务器文件后在终端输入如下命令启动服务器 node app.js当控制台打印出我们设置的语句时表示服务器已经启动成功 现在简单测试一下调用接口 在浏览器中输入 http://localhost:3000/hello 如果出现 Hello shaoyahu ! 就说明接口调用成功了 那么后端先写到这里 , 我们现在来看前端 前端 安装element plus npm install element-plus --save安装完毕后打开 main.ts 文件进行引入和挂载 import { createApp } from vue import ElementPlus from element-plus // 加入 import element-plus/dist/index.css // 加入 import App from ./App.vueconst app createApp(App) // 修改 app.use(ElementPlus) // 修改 app.mount(#app) // 修改这样就能使用饿了么的组件了 安装 axios npm install axios --save在 src 目录下新建文件 axios.ts axios.ts 进行简单的封装 , 不添加拦截器 import axios from axiosconst service axios.create({// 根据刚才的后端地址和端口配置写出请求基础路径baseURL: http://localhost:3000 })export default service在 src 目录下新建文件夹起名 api 在 api 文件夹中新建文件起名为 user.ts user.ts 专门存放和用户有关的接口请求 我们写一个获取用户信息的请求 import axios from ../axios// 获取用户信息 export function getUserData(data: { name: string }){return axios.post(/getUserData, data) }axios 相关的操作完成后目录结构如下图 ![在这里插入图片描述](https://img-blog.csdnimg.cn/9b9d31c0af2d4168a5cf42c2fd02f121.png 编写页面内容 我们将 App.vue 页面的内容清空 , 写入一个简单的提示词 , 输入框和按钮 App.vue templatediv classindexspan选中的用户/spanel-input v-modelsearchTxt typetextareastylewidth: 220px; disabled :placeholder请选择用户 /el-button clicktoSelectPerson选择用户/el-button/div /templatescript setup langts import { ref } from vue; let searchTxt ref() const toSelectPerson () {} /script我们的逻辑是 , 点击选择用户按钮 , 打开一个对话框 , 在对话框中我们选择好需要的用户后关闭对话框 , 将在对话框中选中的用户在输入框中展现 那么 , 由于这个选择人物的对话框会在多处使用到 , 所以我们现在就来封装一个对话框组件吧 封装对话框组件 我们在 src 下的 components 文件夹中新建文件 起名为 myDialog.vue myDialog.vue 需要注意的点如下 开启关闭对话框的方法必须使用 v-model: 来给属性值饿了么组件的对话框原始的 v-model 需要修改成 :model-value 才不会报错这个文件里的样式我没写在下方 , 但是末尾文件中会有样式通过点击遮罩层关闭掉对话框的方式虽然可以关闭对话框 , 但实际上传入的值仍然为 true , 解决方法有两个 , 第一个是通用的 , 将打开对话框和关闭对话框的方法写在组件上 , 通过操控组件来打开和关闭对话框 , 第二个办法则是参考了饿了么组件提供的一个属性 before-close , 在这个属性中 , 我们手动 emit 传入的值修改为 false 就可以了 templateel-dialog :model-valueprops.selectUserShow:titleprops.title :widthprops.width:draggabledrag :before-closebeforeCloseslotdivspan搜索 : /spanel-input v-modelsearchTxt :placeholder输入关键词template #appendel-button clicksearchPerson查询/el-button/template/el-inputdivdivspan选择用户/span/divdivdiv v-foritem, index in data :keyindex stylemargin: 20px;el-checkbox v-modelitem.checked :labelitem.name sizelarge changeselect(item) //div/divdivspan已选择用户/spandiv{{ selectedTxt }}/div/div/div/div/slottemplate #footerspanel-button typeprimary clickemit(confirm, selectedData)确定/el-buttonel-button clickemit(update:selectUserShow, false)取消/el-button/span/template/el-dialog /templatescript setup langts import { computed, ref } from vue import { getUserData } from ../api/user.js export interface IData {id: number,name: string,checked?: boolean } const props defineProps({// 控制组件的显示与隐藏selectUserShow: {type: Boolean,default: false,required: true},// 传进来的已经选择了的用户数组selectUserList: {type: ArrayIData,default: [],required: true},title: {type: String,default: },width: {type: String,default: 80%},drag: {type: Boolean,default: true} }) const emit defineEmits([confirm, update:selectUserShow]) // 查询用户的关键词 let searchTxt ref() // 查询结果数据 let data refIData[]([]) // 已经选择的数据数组 let selectedData refIData[](props.selectUserList) let selectedTxt computed(() {let t selectedData.value.map((item: IData) {t ${item.name} , })t t.substring(0, t.length - 2)return t }) // 查询用户 const searchPerson () {getUserData({ name: searchTxt.value }).then((res: any) {data.value res.data.dataaddSelectedStatus(data.value)}) } // 选择用户 const select (obj: IData) {if (obj.checked) {selectedData.value.push(obj)} else {selectedData.value selectedData.value.filter((item: IData) {return item.id ! obj.id})} } // 给所有人添加选中状态 // 需要判断查询出来的用户中是否已经有被选中的用户 function addSelectedStatus(data: IData[]) {data.forEach((item: any) {let flag selectedData.value.some((item2: IData) {return item2.id item.id})if (flag) {item.checked true} else {item.checked false}}) } // 关闭对话框之前 const beforeClose (done: Function) {emit(update:selectUserShow, false)done() } searchPerson() // 导出搜索用户的方法 , 是为了防止一个页面多个查询用户共用一个组件导致已选中的打开无法显示已选中的情况出现 , 使用方法为在打开组件时调用这个方法 defineExpose({searchPerson }) /script这样一个对话框组件就被封装完成了 , 但是由于添加了很多属性和内容 , 所以定制度是比较高的 , 我将所有默认的内容都放在了默认插槽中 , 如果需要另一个对话框的话可以使用插槽覆盖掉原有的内容 , 不过还是建议重新封装一个 补完页面 对话框组件已经封装好了 , 现在我们回头去使用这个组件 App.vue templatediv classindexspan选中的用户/spanel-input v-modeluserTxt typetextarea stylewidth:220px disabled :placeholder请选择用户 /el-button clicktoSelectPerson选择用户/el-button/div{{ selectUserList }}myDialog v-model:selectUserShowselectUserShow :selectUserListselectUserList confirmconfirmUser/myDialog /templatescript setup langts import { ref } from vue; import myDialog, { IData } from ./components/myDialog.vuelet userTxt ref() let selectUserShow ref(false)const toSelectPerson () {selectUserShow.value true } let selectUserList refIData[]([]) const confirmUser (selectedData: IData[]) {userTxt.value selectUserShow.value falseselectUserList.value selectedDataselectUserList.value.map((item: IData) {userTxt.value ${item.name} , })userTxt.value userTxt.value.substring(0, userTxt.value.length - 2) } /script结束 就这样这个组件就完成了 , 不过不是很建议大家使用传入值来控制组件的显示和隐藏 , 推荐还是使用组件 expose 出的方法来操作 文件链接 最后附上文件链接 https://download.csdn.net/download/shaoyahu/87477013
http://www.hkea.cn/news/14284283/

相关文章:

  • 网站一键生成平面设计速成班
  • 甘孜州住房和城乡规划建设局网站洛阳霞光营销型网站
  • 动易网站管理重庆网站制
  • 网站建设通讯设备中企动力网站动效
  • 备案 新增网站重庆璧山网站制作公司哪家专业
  • 鹤壁做网站的公司商城网站开发设计
  • 长沙微信网站公司生成二维码的小程序
  • 创造自己的网站酒店 网站建设 中企动力
  • 石家庄建行网站江西中创建设工程有限公司网站
  • 一个网站的建站流程网站建设维护需要懂哪些知识
  • 网站搭建运营二级分销软件
  • 制作网站培训学校wordpress教程dara
  • 可以做图片视频的网站郑州网站建设修改
  • 高仿卡西欧手表网站制作大型网站开发
  • 营销网站建设方案网站收录查询api
  • dede网站建设步骤郑州seo培训
  • 华为荣耀官网网站外贸网站建设推广
  • 做企业品牌网站的公司qq头像网站源码
  • 苏州网站制作搭建网上销售渠道
  • 大连网站推广招聘找平面设计师网站
  • 讯美 深圳网站建设wordpress 本地化
  • 家里公网宽带做网站要备案么做网站还 淘宝
  • 深圳建设网站top028唐山哪里有做网站的
  • 邢台市做网站电话会网站建设如何找工作
  • 如何自己做网站挣钱牡丹江营商环境建设监督局网站
  • 怎么使用dw做一个网站上海做家庭影院的公司网站
  • 网站后台内容编辑器网站开发费用会计分录
  • 外贸网站推广哪个比较好东莞seo网站制作报价
  • 网站外链建设需要考核棋牌类网站开发
  • 做创意美食的视频网站营销成功的案例