在 vue 中的 ‘v-model‘ (双向绑定)的实现原理是什么? 如何模拟实现 vue 中的 ‘v-model‘ (双向绑定)?

Ⅰ、Vue 中的 ‘v-model’ (双向绑定) 与 ‘v-bind’ (单向绑定) 的简介:

1、什么是 vue 中的 ‘v-model’ (双向绑定)?

是指:在表单控件或者组件上创建双向绑定;
(即:表单或组件等视图层上的信息发生变化,可以影响数据层的信息; 同样数据层上的信息发生变化,也可以影响视图层上的信息变化,此时称为:双向绑定);

2、什么是 vue 中的 ‘v-bind’ (单向绑定)?

是指:在表单控件或者组件上创建单向绑定;
(即:表单或组件等视图层上的信息发生变化,可以影响数据层的信息; 但数据层上的信息发生变化,反过来却不能影响视图层上的信息变化,此时称为:单向绑定绑定);

3、‘v-model’ (双向绑定)的实现原理是什么?

答:原理如下:
其一、要通过 ‘v-bind’ 实现视图层上信息的变化,来影响数据层上的信息变化;
其二、通过触发一个函数,将数据层上的信息变化通过函数来影响视图层上的信息变化;

Ⅱ、模拟双向绑定 (v-model) 的实现过程及显示结果:

1、双向绑定 (v-model) 的实现代码:

<!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>
</head>
<body>
    <div id="app">
        <input type="text" v-model='username'> 
        <!-- 此时的 v-model 的作用:是通过输入文本等信息(视图层的改变),来改变数据层上的数据值;   然后再看模拟的双向绑定的视图层是否发生变化,从未可判断是否模拟成功; -->
        <!-- 此时的 v-model='username' 是指:双向绑定视图层与数据层;-->

        <input type="text" :value='username' @input='handle' placeholder="123456">
        <!-- 而一般是将 'v-bind' 省略掉了,而以 ':' 来代替; -->
        <!-- @input='handle' 是指:通过在表单中输入信息来触发 handle() 函数; -->
        <!-- 此时的 :value='username' 是指:单向绑定视图层到数据层(即:视图层发生变化,数据层信息就发生变化;   而数据层信息发生变化并不能影响视图层发生变化) -->
        <!-- 此时的 placeholder="123456" 是指:将 123456 信息默认显示在表单栏中; -->
    </div>

    <script src="./node_modules/vue/dist/vue.js"></script>    <!-- 此时是引入:vue.js 文件 -->

    <script>
        let vm = new Vue({
    
    
            el: '#app',
            data() {
    
    
                return {
    
    
                    username: ''    /* 返回一个数据对象 */
                }
            },
            methods: {
    
    
                handle(event) {
    
      // 该 event 参数是默认传过来,接收信息的形参;
                    this.username = event.target.value;
                    /* 此时的 'event.target' 就是指 input 属性值,然后通过 'event.target.value' 来获得输入的数据信息 */
                    //即:监听输入信息事件(input),在输入信息有变化时,就触发 'handle()' 函数,然后将 username 的数据值修改成 view 中的 新输入的值,因此就实现了数据随着视图变化而变化;
                }
            }
        });
    </script>
</body>
</html>

2、运行的显示结果与解释:

A、运行的结果显示为:

上一栏表单是双向绑定的表单;

下一栏表单是模拟双向绑定的表单;
在这里插入图片描述
B、若在下一栏表单中输入信息后,上一栏表单也输出同样的信息就说明 ‘v-bind’ 的用法没问题;

在这里插入图片描述
成功

C、若在上一栏表单中输入信息后,下一栏表单也输出同样的信息就说明自模拟的 ‘v-model’ 的用法也没问题;
在这里插入图片描述
成功

Ⅲ、小结:

哪里有不对或不合适的地方,还请大佬们多多指点和交流!

猜你喜欢

转载自blog.csdn.net/weixin_43405300/article/details/122164745