知识星球-伙伴匹配系统笔记2

2023-11-11

朋友伙伴匹配系统笔记2

1.前端整合路由

  • 下载vue-router

​ 由于我们使用的是vue3,所以对应的是4版本的路由

npm install vue-router@4

​ 或者

yarn add vue-router@4

​ 如下图

  • 前端整合路由

image-20230731101901854

但是这样定义会有问题,如果我们的路径太多,就会导致我们的main.ts特别臃肿,所以,要把路由单独抽出来定义

image-20230731102703269

当然,这边导出之后也别忘了在main.ts中导入

import routes from "./config/route";
  • 实现路由跳转

查看vant3文档,可以直接使用

标签栏支持路由模式,用于搭配 vue-router 使用。路由模式下会匹配页面路径和标签的 to 属性,并自动选中对应的标签。

<router-view />

<van-tabbar route>
  <van-tabbar-item replace to="/home" icon="home-o">标签</van-tabbar-item>
  <van-tabbar-item replace to="/search" icon="search">标签</van-tabbar-item>
</van-tabbar>

image-20230731105105997

路由整合效果

现在我们需要做一个搜索页面

导入vant组件搜索样式

  • 模板

    <template>
      <form action="/">
        <van-search
            v-model="value"
            show-action
            placeholder="请输入搜索关键词"
            @search="onSearch"
            @cancel="onCancel"
        />
      </form>
    
    </template>
    
    <script>
    import { ref } from 'vue';
    import { Toast } from 'vant';
    
    export default {
      setup() {
        const value = ref('');
        const onSearch = (val) => Toast(val);
        const onCancel = () => Toast('取消');
        return {
          value,
          onSearch,
          onCancel,
        };
      },
    };
    </script>
    
    <style scoped>
    
    </style>
    
    

    我们用vue3 的写法试试?

    <template>
      <form action="/">
        <van-search
            v-model="searchText"
            show-action
            placeholder="请输入搜索标签"
            @search="onSearch"
            @cancel="onCancel"
        />
      </form>
    
    </template>
    
    <script setup>
    import { ref } from 'vue';
    import { Toast } from 'vant';
    
    const searchText = ref('');
    const onSearch = (val) => Toast(val);
    const onCancel = () => Toast('取消');
    
    </script>
    
    <style scoped>
    
    </style>
    

    发现有什么不同了吗?

    vue3的写法相比于vue2变的更简洁了

2.添加搜索页面

新建一个SearchPage.vue,这里是写好的

<template>
  <form action="/">
    <van-search
        v-model="searchText"
        show-action
        placeholder="请输入搜索标签"
        @search="onSearch"
        @cancel="onCancel"
    />
  </form>

  <van-divider content-position="left">已选标签</van-divider>
  <div v-if="activeIds.length === 0">暂无已选标签</div>
<van-row gutter="16" style="padding: 0 16px">
  <van-col v-for="tag in activeIds" >
    <van-tag closeable size="small" type="primary" @close = "doClose(tag)" >
      {{ tag }}
    </van-tag>
  </van-col>
</van-row>
  <van-divider content-position="left">请选择标签</van-divider>
  <van-tree-select
      v-model:active-id="activeIds"
      v-model:main-active-index="activeIndex"
      :items="tagList"
  />



</template>

<script setup>
import { ref } from 'vue';

const searchText = ref('');

//标签列表,之后要从数据库取值,元数据
const originTagList = [
  {
    text: '性别',
    children: [
      { text: '男', id: '男' },
      { text: '女', id: '女' },
      { text: '妖', id: '妖' },
    ],
  },
  {
    text: '年级',
    children: [
      { text: '大一', id: '大一' },
      { text: '大二', id: '大二' },
      { text: '大三', id: '大三' },
    ],
  },
];

//标签列表
let tagList = ref(originTagList);

const onSearch = (val) => {
  tagList.value = originTagList.map(parentTag => {
    //克隆原始数组
    const tempChildren = [...parentTag.children];
    const tempParentTag = {...parentTag};
    tempParentTag.children = tempChildren.filter(item => item.text.includes(searchText.value));
    return tempParentTag;
  });
  console.log(tagList.value)
}

//点击取消,清空搜索框
const onCancel = () => {
  searchText.value = '';
  tagList.value = originTagList;
}

//已选中标签
const activeIds = ref([]);//默认选中的标签数组
const activeIndex = ref(0);//默认选中的左侧索引

//标签的取消,移除
const doClose = (tag)=>{
  //过滤之后再赋值给刚才的标签数组
  activeIds.value = activeIds.value.filter(item =>{
    //表达式为true,filter保留
    return item !== tag;
  })
}

</script>

<style scoped>

</style>

效果展示

image-20230731144232020

3.用户展示页面

  • 新建一个models包,定义一个数据模型 user.d.ts文件

image-20230731150738664

  • 修改用户展示界面UserPage.vue

    代码

    <template>
      <van-cell title="昵称" is-link to="/user/edit" :value="user.username" />
      <van-cell title="账号"  :value="user.userAccount" />
      <van-cell title="头像" is-link to="/user/edit"  :value="user.avatarUrl" >
        <img style="height:48px"  :src="user.avatarUrl" >
      </van-cell>
      <van-cell title="性别" is-link to="/user/edit"  :value="user.gender" />
      <van-cell title="电话" is-link to="/user/edit"  :value="user.phone" />
      <van-cell title="邮箱" is-link to="/user/edit"  :value="user.email" />
      <van-cell title="星球编号"  :value="user.planetCode" />
      <van-cell title="注册时间"  :value="user.createTime.toISOString()" />
    
    </template>
    
    <script setup>
    const user={
      id: 1,
      username: '老瑾',
      userAccount: 'xxx',
      avatarUrl: 'http://xxx.xxx.com/images/2023/07/31/pic.md.jpg',
      gender:'男',
      phone: '18777778888',
      email: 'xxx@qq.com',
      planetCode: 'xxx',
      createTime:new Date(),
    }
    </script>
    
    <style scoped>
    
    </style>
    

    效果展示

    image-20230731153126142

    这样,我们的资料展示页面就做好了

4.用户资料修改页面

我们都知道,修改信息需要显示信息,需要传入修改某个信息的必要参数,以及修改前的值,首先需要传参到修改页面

vuerouter传参,由于我们使用的是静态路由

首先需要在修改页面(UserEditPage.vue)添加引入

import {useRoute} from "vue-router";

const route  = useRoute();

思考 :这里的route和之前的引入的router有什么区别?

  • 之前的
import {useRouter} from "vue-router";

const router = useRouter();

router为VueRouter的实例,相当于一个全局的路由器对象,里面含有很多属性和子对象,例如history对象。。。经常用的跳转链接就可以用this.$router.push,和router-link跳转一样

this.$router.push会往history栈中添加一个新的记录

route相当于当前正在跳转的路由对象。。可以从里面获取name,path,params,query等

我们可以测试一下打印this. r o u t e 和 t h i s . route和this. routethis.router

image-20230731162834623

这次我们跳转页面传参,接收参数用route

  • 先进行用户资料页面完善
<template>
  <van-cell title="昵称" is-link  :value="user.username" @click = "toEdit('username','昵称',user.username)" />
  <van-cell title="账号"  :value="user.userAccount" />
  <van-cell title="头像" is-link to="/user/edit"  :value="user.avatarUrl" >
    <img style="height:48px"  :src="user.avatarUrl" >
  </van-cell>
  <van-cell title="性别" is-link :value="user.gender" @click = "toEdit('gender','性别',user.gender)" />
  <van-cell title="电话" is-link :value="user.phone" @click = "toEdit('phone','电话',user.phone)" />
  <van-cell title="邮箱" is-link :value="user.email" @click = "toEdit('email','邮箱',user.email)"  />
  <van-cell title="星球编号"  :value="user.planetCode" />
  <van-cell title="注册时间"  :value="user.createTime.toISOString()" />

</template>

<script setup lang="ts">
import {useRouter} from "vue-router";

const user={
  id: 1,
  username: '老瑾',
  userAccount: 'coderhyx',
  avatarUrl: 'http://pic.vxmsgpush.xyz/images/2023/07/31/pic.md.jpg',
  gender:'男',
  phone: '18777778888',
  email: 'coderhyx@qq.com',
  planetCode: '12345',
  createTime:new Date(),
}
const router = useRouter();

const toEdit = (editKey: string,editName: string,currentValue: string) => {
  router.push({
    path:'/user/edit',
    query:{
      editKey,
      editName,
      currentValue
    }
  })
}
</script>

<style scoped>

</style>
  • 再添加用户资料修改页面
<template>
  <van-form @submit="onSubmit">
      <van-field
          v-model="editUser.currentValue"
          :name="editUser.editKey"
          :label="editUser.editName"
          :placeholder="`请输入${editUser.editName}`"
          :rules="[{ required: true, message: '请填写xxx' }]"
      />
    <div style="margin: 16px;">
      <van-button round block type="primary" native-type="submit">
        提交
      </van-button>
    </div>
  </van-form>

</template>

<script setup lang="ts">
import {useRoute} from "vue-router";
import {ref} from "vue";
const route  = useRoute();
//console.log(route)

const editUser = ref({
  editKey:route.query.editKey,
  currentValue:route.query.currentValue,
  editName:route.query.editName,
})

const onSubmit = (values) => {
  //todo 把editKey currentValue editName 提交到后台
  console.log('onSubmit',values);
};
</script>

<style scoped>

</style>
  • 效果

修改页面

这样我们的修改资料的页面就做好了

细节优化

image-20230731163308523

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

知识星球-伙伴匹配系统笔记2 的相关文章

随机推荐

  • 性能计数器

    性能计数器 Performance Object Counter Description Processor processor Time 指处理器执行非闲置线程时间的百分比 测量处理器繁忙的时间 这个计数器设计成用来作为处理器活动的主要指
  • 成都亚恒丰创科技USB-CAN和CAN分析仪接口方式

    USB CAN和CAN分析仪接口方式 导语 随着现代汽车电子技术的飞速发展 CAN总线成为了汽车领域中最常用的通信协议 而在进行CAN总线的调试和分析时 CAN分析仪是一种必不可少的工具 本文将介绍USB CAN接口和CAN分析仪的基本原理
  • Spring参数校验--List<E>类型参数校验

    1 遇到的问题 今天开发接口 遇到请求参数固定为List
  • 2023年第三届能源、电力与电气工程国际会议 (CoEEPE 2023)

    会议简介 Brief Introduction 2023年第三届能源 电力与电气工程国际会议 CoEEPE 2023 会议时间 2023年11月22日 24日 召开地点 澳大利亚 墨尔本 大会官网 www coeepe org 2023年第
  • Javascript:谈谈JS的全局变量跟局部变量

    今天公司一个实习小妹子问我两段JS代码的区别 我想 好简单
  • 干货分享:六个知名的Go语言web框架

    框架一直是敏捷开发中的利器 能让开发者很快的上手并做出应用 甚至有的时候 脱离了框架 一些开发者都不会写程序了 成长总不会一蹴而就 从写出程序获取成就感 再到精通框架 快速构造应用 当这些方面都得心应手的时候 可以尝试改造一些框架 或是自己
  • 【华为OD机试】 阿里巴巴找黄金宝箱(I)【2023 B卷

    华为OD机试 真题 点这里 华为OD机试 真题考点分类 点这里 题目描述 一贫如洗的樵夫阿里巴巴在去砍柴的路上 无意中发现了强盗集团的藏宝地 藏宝地有编号从0 N的箱子 每个箱子上面贴有一个数字 箱子中可能有一个黄金宝箱 黄金宝箱满足排在它
  • BurpSuite实战教程01-web渗透安全测试(靶场搭建及常见漏洞攻防)

    渗透测试 渗透测试 Penetration test 即安全工程师模拟黑客 在合法授权范围内 通过信息搜集 漏洞挖掘 权限提升等行为 对目标对象进行安全测试 或攻击 最终找出安全风险并输出测试报告 Web渗透测试分为白盒测试和黑盒测试 白盒
  • 在浏览器输入URL,按下回车之后的流程?

    1 在浏览器中输入一个URL 2 查找本地配置文件 如果之前有访问过 浏览器会进行缓存 如果没有的话会在本机域名解析文件hosts文件中寻找是否存在该URL的域名映射 如Windows的配置文件 C Windows System32 dri
  • NIO初级例子

    NIO初级例子 前言 一 代码撸上 前言 使用window系统环境 window 环境测试 测试使用telnet ip 端口 win R cmd 输入telnet id port Ctrl send 发送信息 缺点 无阻塞 但是cpu空转
  • UE4_代理示例_时钟

    时钟 TimeOfDayHandler 注册代理 执行代理 Fill out your copyright notice in the Description page of Project Settings pragma once inc
  • 陇原战“疫“2021网络安全大赛 Web EasyJaba

    陇原战 疫 2021网络安全大赛 Web EasyJaba 文章目录 陇原战 疫 2021网络安全大赛 Web EasyJaba 不出网 参考链接 查看源码 禁用了一些类 这里说一下反编译工具的情况 之前我一直用的jd gui 但是本题的附
  • SQLi-LABS(21~25a关详解)

    SQLi LABS Less 21 查看题目环境 登陆给我回显的数据是I LOVE YOU COOKIES 这题看了网上的wp才知道原来是将我们的uname和passwd都进行base64编码 表示不知道怎么看出来的 Cookie unam
  • StandardScaler函数用法

    StandardScaler 是来自 sklearn preprocessing 模块的一个类 其作用是进行特征缩放 使得所有特征的均值为 0 标准差为 1 这种处理方式也被称为数据的标准化 Standardization 或者 Z Sco
  • webView打开的页面和手机浏览器打开的不一样

    同一个url 用webView打开的和直接打开的不一样 webView打开的自动就有个商品在里面了 而且按钮也点击无效 大神们帮帮忙吧
  • java socket聊天室 swing做界面 Tcp为通讯协议 支持私聊 群聊 发文件

    Java的的的的聊天室 源代码下载 首先我们来看看程序界面 丑到爆 勉强能用就行啦 第一个 登录界面 第二个 用户界面 第三个 服务器界面 好了上面三个界面是程序的主界面 下面我们先讲讲如何使用源代码 使用条件 一数据库 我这里用的MyS
  • Linux系统点亮LED

    目录 应用层操控硬件的两种方式 sysfs 文件系统 sysfs 与 sys 总结 标准接口与非标准接口 LED 硬件控制方式 编写LED 应用程序 在开发板上测试 对于一款学习型开发板来说 永远都绕不开LED 这个小小的设备 基本上每块板
  • webstorm配置sass

    最近用webstorm 做项目 使用create react app创建项目 安装node sass chokidar 使用命令行来将sass转换为css 不尽人意的是 在vscode 可以正常使用 到了webstorm TM 一直不会自动
  • 视频点播服务器的配置如何选择,需要多大的带宽

    对于普通的企业网站 服务器带宽只需5M 10M 每天面对1w用户是没有问题的 图片网站 10M带宽可能只支持100 1k人 天访问 然后 如果是一个视频点播网站 服务器的带宽将增加几十倍 特别是对于视频点播服务器 瓶颈是带宽 视频点播服务器
  • 知识星球-伙伴匹配系统笔记2

    朋友伙伴匹配系统笔记2 1 前端整合路由 下载vue router 由于我们使用的是vue3 所以对应的是4版本的路由 npm install vue router 4 或者 yarn add vue router 4 如下图 前端整合路由