Vue3.x setup函数常用操作示例

686 阅读1分钟

1.在template使用setup函数内定义的数据与方法。

<template>
    {{name}}     //闪耀的鸡蛋黄        1.3
    <button @click="method">使用setup中的method方法</button>  2.3  //闪耀的鸡蛋黄
</template>

<script>
export default {
    setup(){
        name:"闪耀的鸡蛋黄",          例1.1
        let method = ()=>{            例2.1
            alert(name)
        }
        
        return { name,method }        1.2/2.2  //注意
    }
}
</script>

注意!只有setup中被return的数据才可以在template中直接使用。

想要在template里如果想要使用setup函数内定义的数据与方法只要setup函数内return了数据与方法就可以直接在template里直接使用。

2.在methods使用setup定义的函数方法。

<template>
    <button @click="strike">点击</button>     4
</template>

<script>
export default {
    setup(){
        let action = ()=>{            1
            alert("setup中的方法")     
        }
        
        return { action }             2
    },
    methods:{
        strike(){
            action()                  3
        }
    }
}
</script>

想要在methods里使用setup函数内定义的数据与方法如同在templat内使用的方式一样,只要setup内return了该数据或者方法,就可以直接使用。

3.setup内使用router路由。

<template>
    <button @click="skip">路由跳转</button>   5
</template>

<script>
import {useRouter} from 'vue-router'    1  //注意需要先引入路由组件
export default {
    setup(){
        const router = useRouter()      2
        let skip = ()=>{
            router.push('/')            3
        }
        
        return { skip }                 4
    }
}
</script>

想要在setup内使用router路由我们需要引入路由组件vue-router(第 1 步),当然在引入之后我们可以定义一个别名来方便使用(第 2 步),之后就可以使用别名来使用路由功能了。

4.setup内使用axios。

<script>
import {axios} from 'axios'          1    //注意需要先引入路由组件
export default {
    setup(){
        let record = axios.get('/')  2
        return {record}
    },
    methods:{
        console.log(this.record)     3    //methods内可以正常使用this
    }
}
</script>

想要在setup内使用axios我们也需要使用axios组件,并对组件进行引入。

5.setup内通过传参获得data中的参数。

<template>
    <button @click="delivery(name)">触发setup内delicery方法并传递参数</button>   2
</template>
<script>
    setup(){
        let delivery = (name)=>{      3
          alert(name + "参数")        4
        }
        return { delicery }
    },
    data(){
        return{
            name:"传递"      1
        }
    }
</script>

想要在setup里面获取data内的数据,我们有两种方法:

  1. 通过本方法传参获取 。
  2. 通过方法 6 的onMounted方法。

6.setup内使用data中的数据。

<script>
import { onMounted } from "vue";      1
setup(){
const { ctx } = getCurrentInstance()
    onMounted(()=>{                   3
      console.log(ctx.data) /数据     4          
    })
},
data(){
    return{
        data:"数据"          2
    }
}
</script>

7.setup内使用refs。

<template>
    <el-form ref="formRefs" :model="ruleForm" :rules="rules" label-width="70px">   3
            <el-form-item label="用户名:" prop="username">
              <el-input v-model="ruleForm.username"></el-input>
            </el-form-item>
            <el-form-item class="button">
                <el-button type="success" @click="login(ruleForm)">登录</el-button> 4
            </el-form-item>
        </el-form>
</template>

<script>
import { getCurrentInstance } from "vue";           1
import { ElMessage } from 'element-plus'
export default {
    setup(){
        const { ctx } = getCurrentInstance()         2
        let login = (ruleForm) => {                  5
            ctx.$refs.formRefs.validate((value) =>{} 6
        }
        
        return { login }
    },
    data(){
        return{
            ruleForm: {
                username: 'admin',
            },
        },
        rules: {
                username: [
                  {
                    // required: true,
                    message: '请输入用户名',
                    trigger: 'blur',
                  },
                  {
                    min: 3,
                    max: 5,
                    message: '3到5位字符',
                    trigger: 'blur',
                  }],
         }
    }
}
</script>

这里的例子是使用element-ui-plus来做表单验证。

我们需要利用getCurrentInstance方法来获取到refs的数据,首先引入getCurrentInstance方法和设置别名,在定义好ref后就可以在setup中使用ctx.$refs.ref.方法来使用。

注意!!记得return方法哦!