首页 > 其他分享 >vue3 使用vue-router 进行网页跳转以及获取问号后面的参数

vue3 使用vue-router 进行网页跳转以及获取问号后面的参数

时间:2023-09-04 12:24:06浏览次数:45  
标签:vue const author vue3 import push router 跳转

关键代码:

const router = useRouter()
const author = 'myname'
router.push({ name: 'Edit', query: { author }})

const route = useRoute()
const value = route.query.key

详细步骤:
0. Initial

git clone https://github.com/element-plus/element-plus-vite-starter
cd element-plus-vite-starter
yarn
  1. vue3使用vue-router
yarn add vue-router nprogress
mkdir src/router
touch src/router/index.ts
  1. src/router/index.ts内容如下:
// import { createRouter, createWebHashHistory } from 'vue-router'
import { createRouter, createWebHistory } from 'vue-router'
import NProgress from 'nprogress'
import 'nprogress/nprogress.css'

const routes = [
  {
    path: '/',
    redirect: '/home',
  },
  {
    path: '/edit',
    name: 'Edit',
    component: () => import('~/views/Edit.vue'),
  },
  {
    path: '/home',
    name: 'Home',
    component: () => import('~/views/Home.vue'),
  },
]

const router = createRouter({
  history: createWebHistory(),
  routes,
})

router.beforeEach(async (to, from) => {
  NProgress.start() // 显示页面加载进度条
})

router.afterEach(to => {
  NProgress.done()
})

export default router

配置自动引入:

yarn add -D unplugin-vue-components unplugin-auto-import

参考这个:https://element-plus.org/en-US/guide/quickstart.html#on-demand-import
在vite.config.ts中添加:

import AutoImport from 'unplugin-auto-import/vite'

   AutoImport({
      resolvers: [ElementPlusResolver()],
      imports: [
        'vue',
        'vue-router',
        {
          axios: [
            ['default', 'axios'], // import { default as axios } from 'axios',
          ],
        },
      ],
      eslintrc: {
        enabled: true,
        filepath: './.eslintrc-auto-import.json',
        globalsPropValue: true,
      },
    }),

编程式跳转:

// 字符串路径
router.push('/users/eduardo')

// 带有路径的对象
router.push({ path: '/users/eduardo' })

// 命名的路由,并加上参数,让路由建立 url
router.push({ name: 'user', params: { username: 'eduardo' } })

// 带查询参数,结果是 /register?plan=private
router.push({ path: '/register', query: { plan: 'private' } })

// 带 hash,结果是 /about#team
router.push({ path: '/about', hash: '#team' })

修改src/main.ts

import { createApp } from "vue";
import App from "./App.vue";
import router from './routes/';

// import "~/styles/element/index.scss";

import ElementPlus from "element-plus";
// import all element css, uncommented next line
import "element-plus/dist/index.css";

// or use cdn, uncomment cdn link in `index.html`

import "~/styles/index.scss";
import "uno.css";

// If you want to use ElMessage, import it.
import "element-plus/theme-chalk/src/message.scss";

const app = createApp(App);
app.use(ElementPlus);
app.use(router);
app.mount("#app");

src/App.vue

<template>
  <el-config-provider namespace="ep">
    <BaseHeader />
    <div class="flex main-container">
      <BaseSide />
      <div w="full" py="4">
        <Logos my="4" />
        <!-- <HelloWorld msg="Hello Vue 3 + Element Plus + Vite" /> -->
        <router-view />
      </div>
    </div>
  </el-config-provider>
</template>

<style>
#app {
  text-align: center;
  color: var(--ep-text-color-primary);
}

.main-container {
  height: calc(100vh - var(--ep-menu-item-height) - 3px);
}
</style>

增加两个页面:

mkdir src/views
touch src/views/Home.vue
touch src/views/Edit.vue

Home.vue

<template>
  <el-row>I'm Home</el-row>
  <el-input v-model='who' />
  <el-button @click='gotoEdit(who)'>编辑</el-button>
  <el-button @click='router.push({ name: "Edit" })'>这也是编辑</el-button>
</template>
<script setup lang="ts">
const who = ref('')
const router = useRouter()  // 这句不能写函数里

const gotoEdit = async (author?: string) => {
  if (author) {
    router.push({ name: 'Edit', query: { author } })
    // 也可以是:
    //router.push(`/edit?author=${author}`)
  } else {
    router.push({ name: 'Edit' })
    // 也可以是:
    //router.push('/edit')
  }
}
</script>

Edit.vue

<template>
  <el-row>Editing</el-row>
  <el-row>author: {{ author }}</el-row>
</template>

<script setup lang="ts">
  const author = ref('')
  const route = useRoute()  // 这句要写在外层,不能在函数里或mounted里

  onMounted(async () => {
    const { query } = route
    if (query && query.author) {
      author.value = query.author
    }
  })
</script>

See more at: https://router.vuejs.org/zh/guide/essentials/passing-props.html

标签:vue,const,author,vue3,import,push,router,跳转
From: https://www.cnblogs.com/waketzheng/p/17676591.html

相关文章

  • Vue.js 组件的2种创建使用方法
    创建组件的两种方式1.全部注册组件Vue.commpent('自定义标签名',{ //组件有自己的一个data函数,也只能是函数 组件不可有根节点el属性 data:function(){ return{ //返回data中的数据 } //模板 template:` `, methods:{ //组件的方法 }, computed:{ //计算属性 }, watch:{ //......
  • Vue-----模板插值-----(v-once、v-html、v-bind使用)
    1、v-once当组件在进行变量插值时只会插值一次。某些情况下,某些组件的渲染是由变量控制的,但是我们想让它一旦渲染后就不能够再被修改,可以是由v-once来实现<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metaname="viewport"content="widt......
  • Vue element 表格跨行合并单元格
    1、定义table.js/***生成表格合并行坐标阵列rowspan、colspan信息*@param{表格数据}tableData*@param{合并列字段}mergeColumnsexample:["filed1",[filed2]]*@returns坐标阵列*/exportfunctiongetTableSpanMap(tableData,mergeColumns){varspa......
  • PC端项目和移动端项目之间,根据设备类型判断相互跳转
    移动端项目配置:在index.html里添加以下代码即可<script>letsUserAgent=navigator.userAgent.toLowerCase();letisIpad=sUserAgent.match(/ipad/i)=="ipad";letisIphoneOs=sUserAgent.match(/iphoneos/i)=="iphoneos";letisMid......
  • VUE 打开新页面方法记录
    1.使用VUERouter主要使用router的resolve方法进行路径及参数构造jumpPage(){letrouteData=this.$router.resolve({name:"newPage",query:{name:"zs"}})window.open(routeData.href,"_blank&qu......
  • Vue2.0 使用wangEditor(富文本编辑器)
     1、安装npminstallwangeditor--save2、页面中使用2.1定义容器<divid="content"></div>2.2引用wangeditor//引入wangeditorimportwangEditorfrom"wangeditor";2.3创建实例,调用它的方法,使页面中呈现富文本编辑在mouted()勾子函数中操作mounted(){......
  • .Net+vue+Element 七牛云上传
    API安装官方文档:developer.qiniu.com/kodo/1237/c…Nuget搜索安装 Qiniu Bucket储存空间名bucket接口文档:developer.qiniu.com/kodo/3941/t…stringBucket="image";//七牛云储存空间的名字stringAccessKey="VuDqYiw8qQobmajri.......";stringSecretKey......
  • vue 组件递归显示,递归组件中事件传值问题。
    1、比如下面的结构[{id:1,text:'1',children:{id:2,text:'2',children:{id:3,text:'3'......}}]可以看到,每个节点下面的children都是不一定的,有的可能会有很多层,有的可能只有一层。......
  • vue组件切换_demo
    项目参考:36_动态组件_哔哩哔哩_bilibili项目结构:App.vue<template><component:is="Component"></component><button@click="switchHandle">switchComponent</button></template><script>importComponent......
  • 手把手教你vue3-ts-uniapp-vite创建多端小程序-3 统一ui,uni-ui库
    uni-ui官网地址https://uniapp.dcloud.net.cn/component/uniui/quickstart.html1.安装sass、sass-loadernpminstallsass-Dnpminstallsass-loader-D2.安装uni-uinpminstall@dcloudio/uni-ui3.配置easycom。在pages.json中配置"easycom":{"autoscan&q......