Vue的V-XXX的用法和区别(部分)与新建View

注:均把<templet>标签省略

一、Vue的V-XXX的用法和区别(部分)

1. v-show与v-if

<h1 v-show="true">v-show="true"</h1>
<h1 v-show="false">v-show="false"</h1>
<!-- v-show 与v-if的区别:if会直接从dom中删除元素,show仅仅设置dispaly为none -->
<h1 v-if="false">v-if="false"</h1>
<h1 v-if="true">v-if="true"</h1>

2. v-on:change

<input type="text" value="a" v-on:change="fun2()"/>
//和@change相同
<script setup>
	let fun1 =()=>{alert(123)};
	function fun2(){alert(231)};
</script>

在鼠标点击input之后输入再移动到外部点击,则会触发事件,但我不知道为什么会出错

3. v-bind

v-bind:value=""相当于:value=""

4. v-html

<p v-html="message"></p>
<script setup>
const message = "<a href='https://www.baidu.com'>百度百科</a>"
</script>

点击百度百科就会跳转,颜色会变

定义对象的两种非常规方式

<script setup>
let d= {
		d1:'d1',
		d2:2
	}
let e={}
e.e1= 1
</script>

5. v-for

        <h3 v-for="item in menus">{{item.name}} : ${{item.price}}</h3>
		<h3 v-for="(item , index) in menus">{{item.name}} : ${{item.price}}</h3>
		<button @click="fun3">按钮1</button>
		<h3 v-for="(item , index) in menus1">{{item.name}} : ${{item.price}}</h3>
		<button @click="fun4">按钮2</button>
		<h3 v-for="(item , index) in menus2">{{item.name}} : ${{item.price}}</h3>
		<button @click="fun5">按钮3</button>
<script setup>
    let menus = [
		{name:'doif',price:12},
		{name:'安定',price:24},
		{name:'联机',price:20}
	]
	let fun3 =()=>{
		menus[0].price += 10
	};
	let menus1 = ref([
		{name:'doif',price:12},
		{name:'安定',price:24},
		{name:'联机',price:20}
	])//ref定义
	let fun4 =()=>{
		// menus1[0].price += 10无法修改
		menus1.value[0].price += 10//可以修改
	};
	let menus2 = reactive([
		{name:'doif',price:12},
		{name:'安定',price:24},
		{name:'联机',price:20}
	])//reactive定义
	let fun5 =()=>{
		menus2[0].price += 10
	};
</script>

点击按钮1后,内存的值已经被修改,只是未刷新,所以点击按钮2或3时,界面刷新会将1所修改的值更新

6. v-model

<input type="text" name="" id="" v-model="input_t" @change="fun6"/>//同步更改
<script setup>
let input_t = ''
	let fun6 = ()=>{
		alert(input_t)
	}
</script>

尝试一个登录界面

    <div>
		<label>账户:</label>
		<input type="text" name="" id="" v-model="phone"/>
	</div>
	<div>
		<label>密码:</label>
		<input type="text" name="" id="" v-model="password"/>
	</div>
	<div>
		<button @click="fun7">重置</button>
		<button @click="fun8">提交</button>
	</div>
<script setup>
let phone =''
	let password =''
	const phone1 = '1111'
	let fun7 = ()=>{
		phone = ''
		password = ''
		console.log(phone + " " + password)//不会更改输入的值,但内容已经改了,把定义的phone。。变成ref,改的时候使用.value即可
	}
	let fun8 = ()=>{
		if(phone == phone1){
			alert("手机号重复了")
			return
		}
		console.log(phone + " " + password)
	}
</script>

新增页面

1.在views文件夹中新建vue文件

id需要命名

2.在router下的index.ts中加入Vue

import { createRouter, createWebHistory } from 'vue-router'
import HomeView from '../views/HomeView.vue'
import TwoView from '../views/Two.vue'//导入

const router = createRouter({
  history: createWebHistory(import.meta.env.BASE_URL),
  routes: [
    {
      path: '/',
      name: 'home',
      component: HomeView
    },
    {
      path: '/about',
      name: 'about',
      // route level code-splitting
      // this generates a separate chunk (About.[hash].js) for this route
      // which is lazy-loaded when the route is visited.
      component: () => import('../views/AboutView.vue')
    },
	{//在此处新增
		path: '/two',
		name: 'two_name',
		component:TwoView
	}
  ]
})

export default router

3.在App.Vue中加入跳转页面

<script setup lang="ts">
import { RouterLink, RouterView } from 'vue-router'
import HelloWorld from './components/HelloWorld.vue'
</script>

<template>
  <header>
    <img alt="Vue logo" class="logo" src="@/assets/logo.svg" width="125" height="125" />

    <div class="wrapper">
      <HelloWorld msg="You did it!" />

      <nav>
        <RouterLink to="/">Home</RouterLink>
        <RouterLink to="/about">About</RouterLink>
		<RouterLink to="/two">Two</RouterLink>//在此处新增
      </nav>
    </div>
  </header>

  <RouterView />
</template>

<style scoped>
header {
  line-height: 1.5;
  max-height: 100vh;
}

.logo {
  display: block;
  margin: 0 auto 2rem;
}

nav {
  width: 100%;
  font-size: 12px;
  text-align: center;
  margin-top: 2rem;
}

nav a.router-link-exact-active {
  color: var(--color-text);
}

nav a.router-link-exact-active:hover {
  background-color: transparent;
}

nav a {
  display: inline-block;
  padding: 0 1rem;
  border-left: 1px solid var(--color-border);
}

nav a:first-of-type {
  border: 0;
}

@media (min-width: 1024px) {
  header {
    display: flex;
    place-items: center;
    padding-right: calc(var(--section-gap) / 2);
  }

  .logo {
    margin: 0 2rem 0 0;
  }

  header .wrapper {
    display: flex;
    place-items: flex-start;
    flex-wrap: wrap;
  }

  nav {
    text-align: left;
    margin-left: -1rem;
    font-size: 1rem;

    padding: 1rem 0;
    margin-top: 1rem;
  }
}
</style>

页面跳转

1.在另一页面中使用用以跳转到TWO

<script setup lang="ts">
import TheWelcome from '../components/TheWelcome.vue'
import { useRouter } from 'vue-router';//导入
	const router = useRouter()
	let fun1 =() =>{
		router.push({
			path:'/two'
		})
	}//格式
</script>

<template>
  <!-- <main>
    <TheWelcome />
  </main> -->
  <button @click="fun1">跳转TWO</button>
</template>

2. 跳转传参

2.1 传给TWO

<script setup lang="ts">
import TheWelcome from '../components/TheWelcome.vue'
import { useRouter } from 'vue-router';//导入
	const router = useRouter()
	let fun1 =() =>{
		router.push({
			path:'/two',
			query:{
				id:3
			}//加入参数
		})
	}//格式
</script>

<template>
  <!-- <main>
    <TheWelcome />
  </main> -->
  <button @click="fun1">跳转TWO</button>
</template>

2.2 获得id

<template>
	<div id="two">
		<h1> two </h1>
	</div>
</template>

<script setup>
	import { useRoute } from 'vue-router';
	const route = useRoute()
	let id = route.query.id
	console.log(id)
	
</script>

<style>
</style>

三、全局变量的使用

在stores中定义的全局变量可以在所有创造的vue中使用,名称为conter.ts

<template>
	<div id="two">
		<h1> two </h1>
	</div>
</template>

<script setup>
import { onMounted } from 'vue';
import { useRoute } from 'vue-router';
import {useCounterStore} from '@/stores/counter';//导入
	const conter = useCounterStore()
	const route = useRoute()
	let id = route.query.id
	conter.increment()//conter中的函数
	console.log(conter.count)//conter中的变量
	onMounted(()=>{
		console.log('onMonted')
	})
</script>

<style>
</style>

接下来可以自己尝试写一个菜单页面了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值