菜鸟学习vue3笔记-vue3 router回顾

news/2024/7/19 13:36:53 标签: js, vue.js, vuerouter, javascript

1、路由router

pnpm i  vue-router

2、创建使用环境

1.src下创建 router文件夹、里面创建index.ts文件
//创建一个路由暴露出去

//1.引入createRouter
import { createRouter, createWebHistory } from "vue-router";


// import Home  from '../components/Home.vue'

// import Goods from '../components/Goods.vue'
// import Mine from "../components/Mine.vue";


//2.创建路由器
const router = createRouter({
  history: createWebHistory(),
  routes: [
    {
      path: "/home",
      component: ()=>import ("../components/Home.vue"),

      // component:Home

    },
    {
      path: "/goods",
      component: ()=>import('../components/Goods.vue'),
      // component:Goods
    },
    {
      
      path: "/mine",
      component: ()=>import('../components/Mine.vue'),
      // component:Mine
    },

    {
      path:'/',
      redirect:'/home',
      
    }
  ],
});
export default router
2.main.ts文件中配置
javascript">//引入路由器

import router from './router'

const app=createApp(App)

//使用路由器

app.use(router)


3.页面中使用 RouterView, RouterLink

javascript"><template>
  <div class="box">
    <div class="nav-box">
      <RouterLink to="/home">首页</RouterLink>
      <RouterLink to="/goods">商品</RouterLink>
      <RouterLink to="/mine">我的</RouterLink>
    </div>

    <div class="content-box">
      <RouterView></RouterView>
    </div>
  </div>
</template>

<script setup lang="ts">
import { RouterView, RouterLink } from "vue-router";
</script>

<style lang="scss" scoped>
.box {
  .nav-box {
    background-color: red;
    // border: 1px solid #00ff00;

    display: flex;
    > a {
      flex: 1;
      border: 1px solid #00ff00;
      text-align: center;
    }
  }
}
</style>

to 的两种写法

javascript"><RouterLink to="/home">首页</RouterLink>
      <RouterLink to="/goods">商品</RouterLink>
      <RouterLink to="/mine">我的</RouterLink>
javascript"><RouterLink
        :to="{
          path: '/mine',
        }"
        >我的</RouterLink
      >

命名路由

javascript">{
      path: "/home",
      name:'homePage',
      component: ()=>import ("../pages/Home.vue"),

      // component:Home

    },
    {
      path: "/goods",
      name:'goodsPage',
      component: ()=>import('../pages/Goods.vue'),
      children:[
        {
          path:'/detial',
          component:()=>import('../pages/GoodsDeatil.vue')
        }
      ]
      // component:Goods
    },
    {
      
      path: "/mine",
      name:'mine',
      component: ()=>import('../pages/Mine.vue'),
      // component:Mine
    },



 <RouterLink
        :to="{
          name: 'mine',
        }"
        >我的</RouterLink
      >

嵌套路由

javascript">  {
      path: "/goods",
      name:'goodsPage',
      component: ()=>import('../pages/Goods.vue'),
      children:[
        {
          path:'detial',
          component:()=>import('../pages/GoodsDeatil.vue')
        }
      ]
      // component:Goods
    },

<template>
  <div class="box">
    <div class="left">
      <ul>
        <li v-for="(item, index) in goods" :key="index">
          <RouterLink to="/goods/detial"> {{ item }}</RouterLink>
        </li>
      </ul>
    </div>
    <div class="right">
      <RouterView></RouterView>
    </div>
  </div>
</template>
query 传参
javascript">  <!-- 第一种写法 -->
          <RouterLink :to="`/goods/detial?index=${index}&title=${item}`">
            {{ item }}</RouterLink
          >

 <!-- 第二种写法 -->
          <RouterLink
            :to="{
              path: '/goods/detial',
              query: {
                index: index,
                title: item,
              },
            }"
          >
            {{ item }}</RouterLink
          >


<!-- <template>
  <div>商品详情{{ router.query.index }}---{{ router.query.title }}</div>
</template> -->
<template>
  <div>商品详情{{ query.index }}---{{ query.title }}</div>
</template>

<script setup lang="ts">
import { toRefs } from "vue";
import { useRoute } from "vue-router";
let router = useRoute();

// console.log(useRoute().query);

let { query } = toRefs(router);

// let { index, title } = toRefs(useRoute().query);
</script>

<style lang="scss" scoped></style>
params 传参
javascript"> {
      path: "/goods",
      name:'goodsPage',
      component: ()=>import('../pages/Goods.vue'),
      children:[
        {
          path:'detial/:index/:title',
          component:()=>import('../pages/GoodsDeatil.vue')
        }
      ]
      // component:Goods
    },

  <router-link :to="`/goods/detial/${index}/${item}`">
            {{ item }}</router-link
          >

<template>
  <div>商品详情{{ params.index }}---{{ params.title }}</div>
</template>

<script setup lang="ts">
import { toRefs } from "vue";
import { useRoute } from "vue-router";
let router = useRoute();

console.log(router);

let { params } = toRefs(router);


javascript">//这种写法必须写name path报错
{
      path: "/goods",
      name:'goodsPage',
      component: ()=>import('../pages/Goods.vue'),
      children:[
        {
          path:'detial/:index/:title',
          name:'xiangqing',
          component:()=>import('../pages/GoodsDeatil.vue')
        }
      ]
      // component:Goods
    },






<!-- 第二种写法 -->
          <router-link
            :to="{
              // path: '/goods/detial', //path 会报错

              name: 'xiangqing',
              params: {
                index: index,
                title: item,
              },
            }"
          >
            {{ item }}</router-link
          >

路由组件props(params 传参)

javascript">{
      path: "/goods",
      name:'goodsPage',
      component: ()=>import('../pages/Goods.vue'),
      children:[
        {
          path:'detial/:index/:title?',
          name:'xiangqing',
          props:true, //开启 只处理params参数
          component:()=>import('../pages/GoodsDeatil.vue')
        }
      ]
      // component:Goods
    },


<template>
  <div>商品详情{{ index }}---{{ title }}</div>
</template>

<script setup lang="ts">
import { toRefs } from "vue";

defineProps(["index", "title"]);//接受属性
// import { useRoute } from "vue-router";
// let router = useRoute();

// console.log(router);

// let { params } = toRefs(router);

// let { index, title } = toRefs(useRoute().query);
</script>

<style lang="scss" scoped></style>

query传参 这样设置

javascript">props(router){
          return router.query
          },



编程式导航

javascript">router-link 本质是a 标签

<script setup lang="ts">
import { onMounted } from "vue";

import { useRouter } from "vue-router";

let router = useRouter();

onMounted(() => {
  setTimeout(() => {
    router.push("/mine");
  }, 3000);
});


 <button @click="lookDetail(item, index)">点击查看</button>

let lookDetail = (item, index) => {
  router.push({
    name: "xiangqing",
    params: {
      index: index,
      title: item,
    },
  });
};

http://www.niftyadmin.cn/n/5291341.html

相关文章

想要快速搭建知识付费平台?找明理信息科技!

明理信息科技知识付费saas租户平台 一、确定目标群体 首先&#xff0c;你需要明确你的知识付费平台的目标用户是谁。这将帮助你确定所需的内容和功能&#xff0c;以及如何吸引和留住这些用户。例如&#xff0c;如果你的目标群体是职场新人&#xff0c;你的平台可能需要提供…

智慧监控平台/AI智能视频EasyCVR接口调用编辑通道详细步骤

视频监控TSINGSEE青犀视频平台EasyCVR能在复杂的网络环境中&#xff0c;将分散的各类视频资源进行统一汇聚、整合、集中管理&#xff0c;在视频监控播放上&#xff0c;GB28181视频安防监控汇聚平台可支持1、4、9、16个画面窗口播放&#xff0c;可同时播放多路视频流&#xff0c…

11.16 校招 实习 内推 面经

绿*泡*泡&#xff1a; neituijunsir 交流裙 &#xff0c;内推/实习/校招汇总表格 1、校招&#xff5c;三一集团2024校招精选岗位补录&#xff0c;快上车&#xff01; 校招&#xff5c;三一集团2024校招精选岗位补录&#xff0c;快上车&#xff01; 2、校招丨寒武纪24届校招…

中职网络安全Server2002——Web隐藏信息获取

B-2&#xff1a;Web隐藏信息获取 任务环境说明&#xff1a; 服务器场景名&#xff1a;Server2002&#xff08;关闭链接&#xff09;服务器场景用户名&#xff1a;未知 有问题需要环境加q 通过本地PC中渗透测试平台Kali使用Nmap扫描目标靶机HTTP服务子目录&#xff0c;将扫描子…

07、Docker 安装 MinIO

Docker 安装 MinIO 中文官网 拉取镜像 docker pull minio/minio数据文件映射 mkdir -p /docker/minio/data 运行容器 docker run -d \-p 9000:9000 \-p 9090:9090 \--name minio \-v /docker/minio/data:/data \ -e "MINIO_ROOT_USERadmin" \ -e "MINIO_R…

Linux DNS赛题配置

主DNS服务部署 yum -y install bind bind-chroot bind-utils systemctl start named //开启named systemctl enable named //开机自启动 ss -tnl |grep 53 //查看端口是否正常启动 vim /etc/named.conf //编辑全局配置文件listen-on port 53 {any;}; //监听所有…

复试 || 就业day02(2023.12.28)算法篇

文章目录 前言罗马数字转整数环形链表相交链表多数元素快乐数 前言 &#x1f4ab;你好&#xff0c;我是辰chen&#xff0c;本文旨在准备考研复试或就业 &#x1f4ab;文章题目大多来自于 leetcode&#xff0c;当然也可能来自洛谷或其他刷题平台 &#x1f4ab;欢迎大家的关注&am…

如何查看NX UI对话框内的控件(使用UIFW侦查)

一、概述 在NX二次开发中有很多命令从界面上看起开相似&#xff0c;但实质确不同&#xff0c;个人人为一是出于对软件产权的保护&#xff0c;增加二次开发的难度&#xff0c;二是由于NX在不断地发展和版本交替中为了保留老用户的操作习惯&#xff0c;故意用新控件做成老控件的…