为什么自定义双向绑定没反应,可以解释下代码逻辑不是太明白

来源:2-8 vue如何自己实现v-model

老司鸭

2021-08-05 18:33:02

<!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>Document</title>

<script src="https://unpkg.com/vue@next"></script>

</head>


<body>

<!-- : v-bind: @ v-on: -->

<div id="root">

</div>


<script type="text/javascript">

const son = {

model: {

prop: 'text',

event: 'change'

},


props: {

type: String,

default() {

return ''

}

},

template:

`

           <div>自定义双向绑定:</div>

           <input type="text" :value="text" @input="$emit('change',$event.target.value)">

           `

}


const app = Vue.createApp({

components: { 'son': son },

data() {

return {

name: 'haha'

}

},

template:

//把name的值传到子组件

`

           <div>{{name}}</div>

           默认双向绑定:<input type="text" v-model="name">

           <son v-model="name" />

           `

});



const vm = app.mount('#root');

</script>

</body>


</html>


写回答

1回答

好帮手慕久久

2021-08-06

同学你好,解答如下:

同学使用的是vue3版本:

http://img.mukewang.com/climg/610c93300927d18407350070.jpg

而课程中讲解的是vue2版本:

http://img.mukewang.com/climg/610c93590940760206170236.jpg

两个版本的自定义双向绑定语法是不同的,所以同学的代码没有效果。

vue3中,如果想实现自定义双向绑定,需要如下这样写:

http://img.mukewang.com/climg/610c93b509ce73b211420809.jpg

vue2版本的写法,需要做如下调整才行:

http://img.mukewang.com/climg/610c95f609c0b7de11601445.jpg

不论是2版本还是3版本,自定义双向绑定的写法都是固定的。

以vue2版本的写法为例,简单的逻辑如下:

给子组件绑定父组件中的数据:

http://img.mukewang.com/climg/610c9613095dcb5e06500176.jpg

子组件中,需要配置一下:

http://img.mukewang.com/climg/610c963409947e8d05480281.jpg

给子组件的input绑定value值,就实现了父组件单一给子组件传值:

http://img.mukewang.com/climg/610c97d10965ea4f08650507.jpg

然后给子组件的input输入框绑定事件(input);往子组件的input中输入内容时,就会触发input事件;在input的事件处理函数中,再次触发自定义事件change,参数就是子组件input中的内容

http://img.mukewang.com/climg/610c986f0972e92310010204.jpg

http://img.mukewang.com/climg/610c98800904350e10550195.jpg

http://img.mukewang.com/climg/610c988d09e00fad10850174.jpg

此时,vue底层就会对应监听触发的change事件,并把传过来的参数(子组件中的内容),传给父组件,这样就实现了双向绑定。

祝学习愉快!

0

0 学习 · 15276 问题

查看课程