vue3路由代码示例

路由简单分三步吧

第一定义路由: 包括访问地址,对应组件

第二使用:在index.html中使用它

下面是代码示例:

components/Person.vue

html 复制代码
<template>
	<router-link to="/test/hello">跳转</router-link><!-- 跳转子路由 -->
	<router-view/>
	<div class="ttt">
<!-- 		<button @click="consoleName">测试一下</button>-->
		<h2>{{age}}</h2>
		<button @click="addAge">年龄+1</button>
		<h2>{{age2}}</h2> 
<!-- 		<li v-for="data in reactive2" :key="data.name">{{data.name}}</li>
		<h2>{{reactive3.name}}</h2>
		<h2>{{reactive4.a.b.c.d}}</h2> -->
		<button @click="updateReactive2">更新数据</button>
<!-- 		<h2>{{objectRef.two}}</h2> -->
<!-- 		<h2>{{score}}</h2>
		<h2>{{name}}</h2>
		<h2>{{refObj}}</h2>
		<h2>toRefid:{{toRefId}}</h2> -->
		<h2>{{fullName}}</h2>
		<h2>{{name3}}</h2>
		<h2>refObj:{{refObj}}</h2>
		<h2>reactive3:{{reactive3}}</h2>
		<button @click="test">测试一下</button>
		<h2>{{reactive5}}</h2>
		<h2>汽车:{{ person.car.c1 }}、{{ person.car.c2 }}</h2>
		<button @click="changeCar">修改整个车</button>
	</div>
</template>

<script setup lang="ts" name="testName">
	import {ref} from 'vue'
	import {reactive} from 'vue'
	import {toRefs} from 'vue'
	import {toRef} from 'vue'
	import {computed} from 'vue'
	import {watch} from 'vue'
	
	let age2 = 1
	
	const obj = {
		one:Number,
		two:Number
	}
	
	let objectRef = ref<obj>({
		one:1,
		two:2
	})
	
	let reactive4 = reactive({a:{b:{c:{d:233}}}})
	
	let reactive3 = reactive({id:1,name:'13123132测试数据'})
	
	let reactive2 = reactive([
	{
		name:'测试1'
	},
	{
		name:'测试2'
	},
	])
	
	let student = reactive({id:1,score:25,name:'数学'})
	
	let {score,name} = toRefs(student);
	let toRefId = toRef(student,'id');
	
	let refObj = ref([
		{id:1,name:'ref对象'},
		{id:2,name:'测试咯'}
	])
	
	function updateReactive2(){
		reactive2[0].name = "更新数据"
		reactive4.a.b.c.d = 6666
		objectRef.value.two = 6
		score.value = 99
		// refObj.value[1].name = '更新的数据'
		refObj.value = {id:3,name:'测试一下'}
		reactive3.name= "reactive3更新数据"
		toRefId.value = 2 +1
		fullName.value = "啦啦啦啦啦"
	}
	
	
	
	
	
	
	  // 数据
	  let person = reactive({
	    name:'张三',
	    age:18,
	    car:{
	      c1:'奔驰',
	      c2:'宝马'
	    }
	  })
	
	  function changeCar(){
	    person.car = {c1:'雅迪',c2:'爱玛'}
	  }
	
	  // 监视,情况五:监视上述的多个数据
	  watch([()=>person.name,()=>person.car],(newValue,oldValue)=>{
		  debugger
	    console.log('person.car变化了',newValue,oldValue)
	  },{deep:true})
	
	
	
	
	let reactive5 = reactive({
		id:1,
		name:{
			xing:'wang',
			ming:'sansan'
		}
	})
	
	function test(){
		reactive5.name = {xing:'2',ming:'测试'}
	}
	
	const reactiveWatch = watch(reactive3,(newValue,oldValue)=>{
		console.log("reactive对象值变化",newValue,oldValue)
	})
	
	watch([()=>reactive5.id,reactive5.name],(newValue,oldValue)=>{
		console.log("reactive5对象多属性变化",newValue,oldValue)
	},{deep:true})
	
	watch(refObj,(newValue,oldValue)=>{
		console.log("ref对象变化",newValue,oldValue)
	},{deep:true})
	
	watch(reactive3,(newValue,oldValue)=>{
		console.log("reactive对象变化",newValue,oldValue)
	})
	
	let age = ref(1)
	function addAge(){
		age.value = age.value + 1 
		age2 += 1
		refObj.value.name= 6666
	}
	
	const swatch = watch(age,(newValue,oldValue)=>{
		console.log("ref变量值变化"+newValue+oldValue)
		if(newValue>5){
			swatch()
		}
	})

	
	let name3 = ref('李莉莉')
	let fullName = computed({
		get(){
			return name3
		},
		set(value){
			console.log("赋值方法")
			name3.value = value
		}
	})

</script>

<style>
	.ttt{
		color:red
	}
</style>

router/index.js:定义路由地址和映射组件

bash 复制代码
import testName from '../components/Person.vue'
import HelloWorld from '../components/HelloWorld.vue'

import {createRouter,createWebHistory} from 'vue-router'

const router = createRouter({
	history:createWebHistory(),
	routes:[
		{
			path:'/test',
			component:testName//在这个路由界面上补上router-link,以及routerView就可以跳转子路由
			children:[
				{
					path:'/test/hello',//子路由:路径要完整
					component:HelloWorld
				}
			]
		}
	]
})

export default router

main.ts:把组件绑定到标签id上

bash 复制代码
// 映入createApp用于创建应用
import { createApp } from "vue"


// 引入App根组件
import App from './App.vue'
// 引入路由器
import router from './router'


// 创建根组件应用
const app = createApp(App);
// 使用路由器
app.use(router)
// 将整个应用挂在到id为app的容器上
app.mount('#app')

App.vue:使用路由要注意,routerlink和router-view是必须有的,后者是组件显示位置

bash 复制代码
<script setup>
// This starter template is using Vue 3 <script setup> SFCs
// Check out https://v3.vuejs.org/api/sfc-script-setup.html#sfc-script-setup
// import VueTwo from './components/vue2.vue'
import Person from './components/Person.vue'
import HelloWorld from './components/HelloWorld.vue'

</script>

<template>
<!-- 	<VueTwo/> -->
<!-- 	<Person/>-->
<!--  <img alt="Vue logo" src="./assets/logo.png" /> -->
<!-- <HelloWorld msg="Hello Vue 3 + Vite" /> -->
<router-link to="/test">测试</router-link>
<router-view/>
</template>

<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>

index.html

html 复制代码
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <link rel="icon" href="/favicon.ico" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Vite App</title>
  </head>
  <body>
    <div id="app"></div>
    <script type="module" src="/src/main.ts"></script>
  </body>
</html>

页面效果图:

相关推荐
翻滚吧键盘5 分钟前
js代码09
开发语言·javascript·ecmascript
万少35 分钟前
第五款 HarmonyOS 上架作品 奇趣故事匣 来了
前端·harmonyos·客户端
OpenGL40 分钟前
Android targetSdkVersion升级至35(Android15)相关问题
前端
rzl021 小时前
java web5(黑马)
java·开发语言·前端
Amy.Wang1 小时前
前端如何实现电子签名
前端·javascript·html5
海天胜景1 小时前
vue3 el-table 行筛选 设置为单选
javascript·vue.js·elementui
今天又在摸鱼1 小时前
Vue3-组件化-Vue核心思想之一
前端·javascript·vue.js
蓝婷儿1 小时前
每天一个前端小知识 Day 21 - 浏览器兼容性与 Polyfill 策略
前端
百锦再1 小时前
Vue中对象赋值问题:对象引用被保留,仅部分属性被覆盖
前端·javascript·vue.js·vue·web·reactive·ref
jingling5551 小时前
面试版-前端开发核心知识
开发语言·前端·javascript·vue.js·面试·前端框架