vue3学习(五)

前言

        接上一篇笔记,继续Router路由相关入门知识学习,笔记与code示例,分享学习,大佬请忽略。


一、Router路由入门知识点

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
        入门知识点就这些,其他心法可以去官网继续深造。

二、code示例

  1. 按照前面分享的“webstorm新建vue项目相关问题”新建vuejs项目
  2. 在src下新增router目录,目录下新建index.js
  3. 在src下新增views目录,目录下新建多个页面组件
  4. 修改main.js文件内容
  5. 修改App.vue组件内容

1.views下新建页面组件

HomePage.vue

<script setup>

</script>

<template>
  <div>
    <h1>Home</h1>
    <p>This is an home page</p>
  </div>
</template>

<style scoped>

</style>

AboutPage.vue

<script setup>

</script>

<template>
  <div>
    <h1>About</h1>
    <p>This is an about page</p>
  </div>
</template>

<style scoped>

</style>

UserView.vue

<script setup>

import {ref} from "vue";

//:to写法1
const registerQuery = ref({
  path: '/user/register',
  query: {
    username: '肥仔哥哥1930',
    password: '456'
  }
})
console.log("registerQuery传参to1写法", registerQuery);

//:to写法2
const registerParam = ref({
  name: 'UserRegister',
  query: {
    nickName: '说好一辈子',
    sex: '男'
  }
});
console.log("registerParam传参to1写法", registerParam);

// :to写法3
const userInfoParam = ref({
  name: 'UserInfo',
  params: {
    name: '肥仔哥哥1930',
    age: 18,
    sex: '男'
  }
});
console.log("userInfoParam传参to3写法", userInfoParam);

</script>

<template>
  <div>
    <h1>User</h1>
    <p>
      <router-link to="/user/login?username=肥仔哥哥&password=123">用户登录</router-link>
      |
      <!--      <router-link to="/user/register">用户注册</router-link>-->
      <!--      <router-link :to="registerQuery">用户注册</router-link>-->
      <router-link :to="registerParam">用户注册</router-link>
      |
      <!--      <router-link to="/user/info/韦小宝/100/男">用户信息</router-link>-->
      <router-link :to="userInfoParam">用户信息</router-link>
    </p>
    <router-view/>
  </div>
</template>

<style scoped>

</style>

UserLogin.vue

<script setup>
import {onMounted} from "vue";
import router from "@/router";

//取路由传参
const routerParams = router.currentRoute.value.query;
console.log("用户登录路由传参",routerParams);

//取路由元信息
const routerMeta = router.currentRoute.value.meta;
console.log("用户登录路由元信息",routerMeta);

onMounted(() => {
  //vuejs的暴露写法:this.$route
  console.log("UserLogin挂载,路由对象", router.currentRoute.value); //当前激活的路由信息对象
  //仔细看控制台打印的内容,包含一个query对象,里面就是路由传参数的内容
});

//定义跳转用户注册按钮的点击事件
function goUserRegister(){
  //跳转到用户注册页面
  router.push({name: "UserRegister", query: {}});
}

</script>


<template>
  <div>
    <h1>User Login</h1>
    <p>用户名:<input type="text" v-model="routerParams.username"/></p>
    <p>密码:<input type="password"/></p>
    <button  @click="goUserRegister">跳转到用户注册</button>
  </div>
</template>

<style scoped>

</style>

UserRegister.vue

<script setup>
import {onMounted} from "vue";
import router from "@/router";

const routerQuery = router.currentRoute.value.query;
console.log("用户注册路由传参query",routerQuery);


onMounted(() => {
  console.log("UserRegister挂载,路由对象", router.currentRoute.value); //当前激活的路由信息对象
});

</script>

<template>
  <div>
    <h1>User Register</h1>
    <p>用户名:<input type="text" v-model="routerQuery.username"/></p>
    <p>昵称:<input type="text" v-model="routerQuery.nickName"/></p>
    <p>密码:<input type="password"/></p>
    <p>重复密码:<input type="password"/></p>
    <button @click="router.back()">后退</button>
  </div>
</template>

<style scoped>

</style>

UserInfo.vue

<script setup>
import {onMounted} from "vue";
import router from "@/router";

//
const routerParams = router.currentRoute.value.params;
console.log("用户信息路由传参",routerParams);

onMounted(() => {
  console.log("UserInfo挂载,路由传参数", router.currentRoute.value); //当前激活的路由信息对象
});

</script>

<template>
  <div>
    <h1>User Info</h1>
    <p>用户名:{{ routerParams.name }}</p>
    <p>年龄:{{ routerParams.age }}</p>
    <p>性别:{{ routerParams.sex }}</p>
  </div>
</template>

<style scoped>

</style>

2.router下index.js

import {createRouter, createWebHistory,createWebHashHistory} from 'vue-router'
import Home from '../views/HomePage.vue';
//import About from '../views/AboutPage.vue';

console.log(createWebHistory());
console.log(createWebHashHistory());

//定义路由的配置项
const routes = [
    {
        path: '/', //指定url路径,/称为根路径
        name: 'Home', //路由名称,用来标识当前路由,唯一
        component: Home //对应组件
    },
    {
        path: '/about',
        name: 'About',
        component: () => import('../views/AboutPage.vue') //懒加载,路由的懒加载,是通过import()函数实现的
    },
    {
        path: '/user',
        name: 'User',
        component: () => import('../views/UserView.vue'),
        children: [
            {
                path: 'login', //不以/开头的路径就是相对路径,实际路径是/user/login
                name: 'UserLogin',
                component: () => import('../views/UserLogin.vue'),
                meta: { //路由元信息,自定义的数据信息
                    msg: '这是登录页面',
                    needCheck: true
                }
            },
            {
                path: '/user/register', //绝对路径
                name: 'UserRegister',
                component: () => import('../views/UserRegister.vue')
            },
            {
                path: '/user/info/:name/:age/:sex', //to传参数设置路由path
                name: 'UserInfo',
                component: () => import('../views/UserInfo.vue')
            }
        ]
    },
    {
        path: '/:pathMatch(.*)*', //匹配所有路径,配置404页面,也就是找不到路由的时候的页面
        //name: 'NotFound',
        //component: () => import('../views/NotFound.vue')
        redirect: {name: 'Home'} //重定向,重定向到Home页面
    }

]

//创建路由的实例
const router = createRouter({
    //history: createWebHashHistory(), //路由的模式,history模式,hash模式
    history: createWebHistory(), //路由的模式,history模式,H5出的history模式
    routes //路由的配置项
})

//配置路由守卫
router.beforeEach((to, from, next) => {
    console.log('beforeEach', to, from)
    //判断访问的是不是主页,如果是用户的登录页面,直接放行
    if (to.name === 'Home' || to.name == 'UserLogin') {
        console.log('访问的是主页,直接放行');
        next(); //放行
    }
    //判断访问的是不是登录了,如果没有登录,跳转到登录页面
    const user = sessionStorage.getItem('user');
    if (!user) {
        console.log('用户未登录,跳转到登录页面')
        //next('/user/login') //跳转到登录页面
        next({name: 'UserLogin'});
    }

    next(); //放行


})

export default router

3.main.js

import { createApp } from 'vue'
import App from './App.vue'
//导入路由
import router from './router'

createApp(App).use(router).mount('#app')

4.App.vue

<template>
  <div id="nav">
    <!-- 使用内置组件router-link定义导航,to属性:指定链接,url -->
    <router-link to="/">Home</router-link> |
    <router-link to="/about">About</router-link> |
    <router-link to="/user">User</router-link>
  </div>
  <!-- router-view渲染路由对应的组件,将组件显示在当前位置 -->
  <router-view/>
</template>

<script setup>

</script>

<style>
#app {
  font-family: Avenir, Helvetica, Arial, sans-serif;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  text-align: center;
  color: #2c3e50;
  margin-top: 60px;
}
</style>


三、code代码运行效果

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 自己都点下,看看页面效果,看看控制台,看看url地址栏
  • 在应用里的会话存储里自己加一个缓存数据user
  • 再点击下那些被路由守卫拦截的菜单点击后的页面效果

总结

  • 路由相关的入门知识就这些了
  • 这些自己写写忽悠小学妹应该是够用了
            好了,就写到这里,跟大家一起,每天进步一点点,uping!

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

虚拟现实环境下的远程教育和智能评估系统(五)

查阅相关VR眼动注意力联合教育学相关论文 1.Exploring Eye Gaze Visualization Techniques for Identifying Distracted Students in Educational VR&#xff08;IEEE VR 2020&#xff09; 摘要&#xff1a;我们提出了一种架构&#xff0c;使VR教学代理能够响应眼动追踪监控…

【C#】类和对象的区别

1.区别概述 结构体和类的最大区别是在存储空间上&#xff0c;前者是值类型&#xff0c;后者是引用类型&#xff0c;它们在赋值上有很大的区别&#xff0c;在类中指向同一块空间的两个类的值会随一个类的改变而改变另一个&#xff0c;请看如下代码所示&#xff1a; namespace …

数据结构:排序(1)【冒泡排序】【插入排序】【堆排序】【希尔排序】

一.冒泡排序 冒泡排序实际上就是这样&#xff1a; 1.冒泡排序的实现 两个数进行比较&#xff0c;大的往后移动。对于排序这个专题来说&#xff0c;这是比较简单的一种排序了&#xff1a; void Swap(int* a, int* b) {int tmp *a;*a *b;*b tmp; } void BubbleSort1(int* …

Amazon云计算AWS(二)

目录 三、简单存储服务S3&#xff08;一&#xff09;S3的基本概念和操作&#xff08;二&#xff09;S3的数据一致性模型&#xff08;三&#xff09;S3的安全措施 四、非关系型数据库服务SimpleDB和DynamoDB&#xff08;一&#xff09;非关系型数据库与传统关系数据库的比较&…

Elasticsearch 认证模拟题 -2

一、题目 有一个索引 task3&#xff0c;其中有 fielda&#xff0c;fieldb&#xff0c;fieldc&#xff0c;fielde 现要求对 task3 重建索引&#xff0c;重建后的索引新增一个字段 fieldg 其值是fielda&#xff0c;fieldb&#xff0c;fieldc&#xff0c;fielde 的值拼接而成。 …

基于JSP的高校二手交易平台

开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;JSP技术 工具&#xff1a;浏览器&#xff08;如360浏览器、谷歌浏览器、QQ浏览器等&#xff09;、MySQL数据库 系统展示 系统功能界面 用户注册与登录界面 个人中心界面 商品信息界面 摘要 本文研究了高…

Go 优雅的爬虫框架 - Colly

Colly 是一款用 Go 语言编写的优雅网络爬虫框架,速度快、灵活且易于使用 关键特性包括: 线程安全。用户友好的 API。支持 XHR(Ajax)和 WebSocket。缓存和持久化。支持速度限制和分布式爬取。强大的可扩展性。colly采集器配置 AllowedDomains: 设置收集器使用的域白名单,设…

TrueNAS开启SSH登录ROOT

简介: 从 SCALE Bluefin 22.12.0 开始,为了加强安全性并遵守联邦信息处理标准 (FIPS),root帐户登录已被弃用。所有 TrueNAS 用户都应创建具有所有必需权限的本地管理员帐户,并开始使用它来访问 TrueNAS。当根用户密码被禁用时,只有管理用户帐户才能登录 TrueNAS Web 界面。…

深入剖析 Kubernetes 原生 Sidecar 容器

1 Sidecar 容器的概念 sidecar 容器的概念在 Kubernetes 早期就已经存在。一个明显的例子就是 2015 年的这篇 Kubernetes 博客文章&#xff0c;其中提到了 sidecar 模式。多年来&#xff0c;sidecar 模式在应用程序中变得越来越普遍&#xff0c;使用场景也变得更加多样化。 其…

大语言模型拆解——Tokenizer

1. 认识Tokenizer 1.1 为什么要有tokenizer&#xff1f; 计算机是无法理解人类语言的&#xff0c;它只会进行0和1的二进制计算。但是呢&#xff0c;大语言模型就是通过二进制计算&#xff0c;让你感觉计算机理解了人类语言。 举个例子&#xff1a;单1&#xff0c;双2&#x…

【银河麒麟V10服务器OS-系统根分区扩容】指导教程手册

【银河麒麟V10服务器OS-系统根分区扩容】指导教程手册 环境信息&#xff1a;VMware虚拟软件16.0 首先查看KylinOS服务器版本&#xff1a;nkvers 备注&#xff1a; (Tercel) 版本是 V10 SP1 版本&#xff0c; (Sword) 版本是 V10 SP2 版本&#xff0c; (Lance) 版本是 V10 …

Apache SeaTunnel On SparkEngine 集成CDP

随着数据处理需求的日益增长&#xff0c;选择一个高效、灵活的数据处理工具变得尤为关键。SeaTunnel&#xff0c;作为一个开源的数据集成工具&#xff0c;不仅支持多种数据处理引擎&#xff0c;还提供了丰富的连接器和灵活的数据同步方案。 本文将详细介绍 SeaTunnel 的优势和…

笔记:Windows故障转移集群下的oracle打补丁

以下方法比较暴力&#xff0c;请谨慎使用 1&#xff0c;关闭并禁用故障转移集群的服务&#xff0c;如下 2&#xff0c;关闭故障转移集群中资源的自启动 3&#xff0c;重启服务器 4&#xff0c;手动关闭服务 net stop msdtc net stop winmgmt 5&#xff0c;分别对所有节点打…

公路资产三维实景快速建模技术方案

目录 1. 应用背景点云矢量建模特征提取1. 路面标识线自动提取2. 交通标志牌自动提取3.护栏、路缘石自动提取4.路面矢量高程自动纠正 属性及编码计算1.里程桩号自动计算2.单体化要素自动编码 公路三维实景模型自动化建模 1. 应用背景 随着“数字交通强国”建设的不断深入&#x…

「多客」圈子论坛社区交友系统开源版小程序源码|圈子社区系统

简述 社交圈子论坛系统是一种面向特定人群或特定话题的社交网络&#xff0c;它提供了用户之间交流、分享、讨论的平台。在这个系统中&#xff0c;用户可以创建、加入不同的圈子&#xff0c;圈子可以是基于兴趣、地域、职业等不同主题的。用户可以在圈子中发帖、评论、点赞等互…

表格中附件的上传及显示#Vue3#后端接口数据

表格中附件的上传及显示#Vue3#后端接口数据 实现效果&#xff1a; 表格中上传附件 代码&#xff1a; <!-- 文件的上传及显示 --> <template><!-- 演示地址 --><div class"dem-add"><!-- Search start --><div class"dem-ti…

利用audacity和ffmpeg制作测试音频文件

最近要用SIPP测试一个场景&#xff0c;需要发送双声道/16K采样率/16bit量化的PCM流&#xff0c;但是下载的素材往往不能满足参数要求。那么就自己制作。 首先下载mp3文件&#xff0c;并用audacity打开。 接下来&#xff0c;点击菜单栏中轨道-重采样&#xff0c;将采样频率设为1…

【机器学习】Samba-CoE实现高效推理部署

Samba-CoE&#xff1a;突破AI内存墙&#xff0c;实现高效推理部署 一、引言二、Samba-CoE系统概述三、突破AI内存墙的关键技术流数据流三层内存系统 四、Samba-CoE的推理部署与优化动态模型切换资源优化分配性能加速 五、代码实例与实现细节六、结语 一、引言 随着人工智能技术…

AI视频下载:ChatGPT数据科学与机器学习课程

ChatGPT是一个基于OpenAI开发的GPT-3.5架构的AI对话代理。作为一种语言模型,ChatGPT能够理解并对各种主题生成类似人类的响应,使其成为聊天机器人开发、客户服务和内容创作的多用途工具。 此外,ChatGPT被设计为高度可扩展和可定制的,允许开发人员对其响应进行微调并将其集成到…

在“AI PC”中使用NPU运行 Phi-3-mini

欢迎关注我的公众号“ONE生产力”&#xff0c;获取更多AI、云计算资讯分享&#xff01; 前段时间&#xff0c;我做了一系列微软Phi-3-mini小语言模型的教程&#xff0c;很多朋友参考教程进行了实践&#xff0c;其中有一个朋友反馈说模型token推理很慢&#xff0c;没有答道我说…