vue3语法糖的使用和定义、语法糖中路由的使用、语法糖中状态管理的使用、语法糖中组件的传值

1.vue2和vue3区别

1.1 vue3中vue是一个对象,可以使用按需导入

import {createApp} from 'vue ’

1.2 导入区别
  • vue2中使用的vue-router3.0导入的是构造函数 new VueRouter()
  • vue3中使用的vue-router4.0导入的是对象 createRouter()
1.3 语法

vue2语法在vue3中都可以使用,除了过滤器并不能使用

2. vue3脚手架

脚手架中的路由有三种模式:历史模式history、哈希模式hash、抽象模式abstract

2.1 脚手架配置

vue create projectname------Manually select features--------Babel(js编译器)、Router、Vuex、CSS Pre-processors(css预处理器)

3.语法糖

3.1 组件的样式绑定

补:scss语法和less语法动态绑定数据

在vue中的setup函数中定义一个常量,vue3单文件组件中,支持style样式绑定变量,使用v-bind()引入动态值。组件中的数据只能绑定到组件内的标签上,组件外的标签绑定无效

 setup(props) {
            const myColor = ref("red")
            const size = ref(20)
            const mySize = computed(() => {
                return size.value + "px"
            })
            return {
                myColor,
                size,
                mySize
            }
        }

 body {
        background-color: v-bind(myColor);
    }
3.2 语法糖

vue3单文件组件提供了一种更简洁的语法结构,称之为“语法糖”

3.2.1 使用语法糖

1.在script标签上添加setup属性即变为糖衣语法,相当于整个script就是组件的setup函数

2.在语法糖中,省略了导出export default() 省略了setup函数,省略了return()

3.定义的数据无需return即可在模板和样式中调用

4.语法糖中,子组件导入即可使用,无需在components中注册

<script setup>
    import {
        ref
    } from "vue";
    const count = ref(0) 
</script>
3.3语法糖组件传值
3.3.1 父传子

在父组件中子组件标签使用未定义的数据变量向子组件传值,在子组件的语法糖中使用defineProps()声明自定义属性用于接收父组件传值

defineProps定义props的函数,函数参数可以是一个数组直接接收数据,参数是一个对象用于属性验证。

获取父组件向子组件传值通过定义的defineProps函数返回值调用传递的值

<script setup>
    const props=defineProps(["msg","info"])
    console.log(props.msg);//获取传值
</script>
3.3.2 子传父

在语法糖中使用defineEmits()注册自定义事件用于向父组件传值,返回是emit函数.在父组件中使用绑定自定义事件来拿到子组件向父组件的传值

defineEmits()函数参数是一个数组,用于定义自定义事件,可以是小驼峰也可以是全部小写,但是在绑定自定义事件书写应为全部小写。

子组件中:

<script setup>
    import {
        ref,
        watch
    } from "vue"
    const name = ref("")
    const emit = definedEmits(["myName"])
    watch(name, newValue => {
        emit("myName", newValue)
    })
</script>

父组件:

<HelloWorld msg="123" @my-name="value=>{age=value}"/>
3.4 语法糖中的路由

在语法糖中需要用到路由信息对象route和路由配置对象router必须按需引入对象,才可以使用

3.4.1 在语法糖中引入路由

在语法糖中引入路由配置对象和路由信息对象:

import {useRoute, useRouter} from "vue-router"
3.4.2 在语法糖中使用路由

利用const定义一个常量定义路由

    const route = useRoute()
    const router = useRouter()
3.4.3 在语法糖中实现路由跳转

html:

    <button @click="goToHome">去主页</button>

javascript:

    function goToHome() {
        router.push("/")
    }
3.5 语法糖的状态管理

在语法糖中使用状态管理首先也需要引入状态管理对象

3.5.1 引入状态管理
    import { useStore } from "vuex"
3.5.2 定义状态管理仓库

在含有router的vue项目中store文件夹下的index.js文件中定义你所需要的状态管理的变量。仓库中state对象中定义变量isLogin。想要改变变量的值需要在mutations中定义修改变量的函数setisLogin,含有两个参数,第一个参数state为仓库中state定义的变量对象,第二个参数value是定义的新值。

import { createStore } from 'vuex'

export default createStore({
    state: {
        isLogin: false
    },
    getters: {},
    mutations: {
        setisLogin(state, value) {
            state.isLogin = value
        }
    },
    actions: {},
    modules: {}
})
3.5.2.1 在语法糖中调用状态管理仓库中的变量

在组件使用之前,需要在js中导入store仓库才能使用状态管理。在组件中使用store.sate.isLogin打点调用仓库state对象中变量的值

引入状态管理仓库:

    import {
        useStore
    } from "vuex"

显示状态管理仓库的变量

    <h1>{{store.state.isLogin}}</h1>
3.5.2.2 改变状态管理仓库中的变量值

改变状态管理仓库中的变量值,需要现在状态管理仓库中的mutations对象中定义改变变量值的函数

export default createStore({
    state: {
        isLogin: false
    },
    getters: {},
    mutations: {
        setisLogin(state, value) {
            state.isLogin = value
        }
    },
    actions: {},
    modules: {}
})

在组件中使用状态管理对象的commit函数修改变量值,参数一为状态管理中的修改变量值的函数名,第二个参数是修改后的新的变量值

html:

    <button @click="goToHome">去主页</button>

javascript:

    function goToHome() {
        router.push("/")
        store.commit("setisLogin", true)
    }
<think>好的,用户想了解在Vue3的setup语法糖中如何实现路由参。我需要结合提供的引用内容来整理答案。首先,根据引用[1][4],setup语法糖中可以使用useRouteuseRouter来处理路由路由参通常有queryparams两种方式。引用[2]提到Vue3的编程式导航使用router.push方法,这Vue2的$router.push类似。在子组件中,引用[4]展示了如何用defineProps接收props,但路由参数应该通过route对象获取,而不是props。需要分步骤说明如何递参数获取参数,包括queryparams的区别,以及router.push的用法。同时,要给出代码示例,确保语法正确,比如在模板中正确使用路由,以及在setup中如何导入使用路由相关函数。另外,要注意用户提到的语法糖特性,比如script setup的简洁写法,避免不必要的代码结构。最后,生成相关问题,可能涉及性能优化、其他参方式或组件通信方法。</think>### Vue3 setup语法糖实现路由参的方法 #### 1. 路由跳转参 在`<script setup>`中使用`useRouter`进行路由跳转,支持两种参方式: ```javascript import { useRouter } from &#39;vue-router&#39; const router = useRouter() // query参(参数显示在URL) router.push({ path: &#39;/target&#39;, query: { id: 123, type: &#39;news&#39; } }) // params参(需提前配置路由路径) router.push({ name: &#39;Detail&#39;, // 路由名称 params: { id: 456 } }) ``` **注意**:params参要求路由配置包含动态参数,如`path: &#39;/detail/:id&#39;`[^2][^3] #### 2. 接收路由参数 在目标组件使用`useRoute`获取参数: ```javascript import { useRoute } from &#39;vue-router&#39; const route = useRoute() // 获取query参数 console.log(route.query.id) // 输出123 // 获取params参数 console.log(route.params.id) // 输出456 ``` 两种参方式的区别: - **query**:参数明文显示在URL,刷新不丢失 - **params**:路径更简洁,但刷新后参数会丢失[^1][^4] #### 3. 组件通信扩展 对于父子组件,推荐组合使用: ```javascript // 子组件 const props = defineProps([&#39;msg&#39;]) const emit = defineEmits([&#39;update&#39;]) // 父组件 <Child :msg="message" @update="handleUpdate"/> ``` 这种组合式API比路由参更适合组件层级明确的数据递[^4]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值