欢迎光临散文网 会员登陆 & 注册

Vue从零开始总结28

2021-04-23 19:38 作者:忘魂儿  | 我要投稿

是否还有人记得,双向绑定里有个可爱的v-model啊!以后就管她叫小棉袄了。

刚才通过底层,两步才实现了小棉袄的功能,下面回顾一下。

第一步:通过:value动态获取你输入的值;

第二步:通过@input这个监听事件,把动态获取的value又通过event.target.value赋值给了子组件data中的数据。并将它以自定义事件的方式发送给了父组件,在子组件的标签上,监听自定义事件,把它连带参数值,一起传给了父组件的函数,父组件的函数通过参数直接获取值,并通过这个值改变了传递给子组件数据的值,实现了双向绑定。

听起来是不是很绕,没关系,你们的小棉袄来救你们了!

下面,开始简化,老样子。

第一步:先弄模板

<template id="son">
 <div>
   <h2>{{sonnum1}}</h2>
   <h2>{{sonNum1}}</h2>
   <input type="text" v-model="sonNum1">//子组件data中的key
   <h2>{{sonnum2}}</h2>
   <h2>{{sonNum2}}</h2>
   <input type="text" v-model="sonNum2">
 </div>
</template>

第二步:确立父子关系,接收父组件值,子组件中使用watch函数监听相关数值改变,参数为变化之后的数值,这里写成newValue,之前的通过input事件获取--event.target.value就可以替换成newValue,然后发送事件带给父组件的参数值,也换成newValue就行了,剩下的一样,通过自定义事件,传递给父组件的函数,然后再通过父组件的函数,改变父组件内部的数值,最终实现双向绑定。

const app=new Vue({
   el:document.querySelector('#app'),
   data:{
   num1:0,//父组件中的数值
   num2:1
}, components:{
     cpn:{
       template: '#son',
       data(){
         return {
         sonNum1:this.sonnum1,//子组件data中的key
           sonNum2:this.sonnum2
         }
       },
       props:{//父传子
         sonnum1:Number,//接收父组件数据,即父组件传递过来的数据
         sonnum2:Number
       },
       watch:{//监听子组件data中的key值是否改变
        sonNum1(newValue){//若有改变则为newValue,若是为空则为NAN
         this.sonNum1=parseInt(newValue)//将子组件data中的key值赋值为newValue
           this.$emit('sendnum1',newValue)//将newValue与自定义事件封装一起发送给父组件
         }
         ,
         sonNum2(newValue){
           this.sonNum2=parseInt(newValue)
           this.$emit('sendnum2',newValue)//子传父
         }
       }
     }
 },
 methods: {

//父组件中负责接收的两个函数,作用是把父组件中与子组件中绑定的数值进行匹配
     changenum1(sonNum1){
       this.num1=sonNum1
     },
     changenum2(sonNum2){
       this.num2=sonNum2
     }
 }

})

<div id="app">
<cpn :sonnum1="num1" :sonnum2="num2" @sendnum1="changenum1" @sendnum2="changenum2">//通过监听自定义事件,将事件连带参数,一起发送给父组件负责接收的函数,并使用

</cpn>
</div>

Vue从零开始总结28的评论 (共 条)

分享到微博请遵守国家法律