Vue3验证抛出事件

目录

一.问题

二、解决方法

1.书写思路

2.完整代码

3.运行结果

三、总结



一.问题

vue官方文档中只有主要代码介绍,没有完整例子,自己操作时无从下手

二、解决方法

1.书写思路

1)在emits中以对象的形式添加验证函数

emits: {
  
   // 验证submit 事件
    submit: ({ email, password }) => {
      if (email && password) {
        return true
      } else {
        console.warn('Invalid submit event payload!')
        return false
      }
    }
  },

2)确定哪个控件的哪个事件触发事件(此处在点击按钮“提交”时触发事件)

 template:
    `
    <label for="email">email</label>
    <input id="email" v-model="email"/>
    <br/>
    <label for="password">password</label>
    <input id="password" v-model="password"/>
    <br/>
    <button @click="this.$emit('submit',{email,password})">提交</button>
    `,

3)参数email和password从哪里来

     此时,email和password是不存在的,所以要在组件内部的data选项中定义并且实时获取input中的数据(检验才有意义,静态数据检验意义不大)——input中使用 v-model

 data(){
       return{
           email:"",
           password:"",
       }
   },

注:官方文档中把 验证函数sumbit的调用,写在了methods选项中的 submitForm函数中。效果和这个是一样的——只是为了减少字符串模板中的逻辑代码而已。

2.完整代码

1.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>自定义事件</title>
    <script src="./vue@next.js"></script>

</head>
<body>
    <div id="app">
        <custom-form  ></custom-form>
    </div>
    <script src="day5-自定义事件.js"></script>
</body>
</html>

2.js代码

const customForm={
   data(){
       return{
           email:"",
           password:"",
           phone:""
       }
   },
    emits:{
        click:null,
        submit:({email,password})=>{
            if(email&&password){
                console.log(email,password,true)
                return true;
            }
            else{
                console.log(email,password,false)
                console.warn('Invalid submit event payload!')

                return false;
            }
        },

    },
  template:
    `
    <label for="email">email</label>
    <input id="email" v-model="email"/>
    <br/>
    <label for="password">password</label>
    <input id="password" v-model="password"/>
    <br/>
    <button @click="this.$emit('submit',{email,password})">提交</button>
    `,
   
}
const rootApp={
    components:{
        "custom-form":customForm
    },
  
}
const app=Vue.createApp(rootApp);
app.mount("#app");

或者

const customForm={
   data(){
       return{
           email:"",
           password:"",
           phone:""
       }
   },
    emits:{
        click:null,
        submit:({email,password})=>{
            if(email&&password){
                console.log(email,password,true)
                return true;
            }
            else{
                console.log(email,password,false)
                console.warn('Invalid submit event payload!')

                return false;
            }
        },

    },
  template:
    `
    <label for="email">email</label>
    <input id="email" v-model="email"/>
    <br/>
    <label for="password">password</label>
    <input id="password" v-model="password"/>
    <br/>
    <button @click="submitForm(email,password)">提交</button>
    `,
    methods:{
        submitForm(email,password){
            this.$emit('submit',{email,password})

        }
    }
}
const rootApp={
    components:{
        "custom-form":customForm
    },
  
}
const app=Vue.createApp(rootApp);
app.mount("#app");

3.运行结果

1)email和password为空

2)email和password不为空 

三、总结

1.验证抛出事件:在emits中直接添加校验事件,在控件中调用校验事件,实参通过data中的数据传递。

2.和调用父组件事件类似,只不过事件直接写在了子组件的emits中,不需要从父组件中获取。

/*希望对你有帮助!

如有错误,欢迎指正*/

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值