Vue 数据绑定 和 数据渲染

简介: Vue 快速入门——数据绑定及数据渲染,事件绑定机制 介绍及演示。

目录

一、Vue快速入门

       1.简介 :  

       2.MVVM :

       3.准备工作 :

二、数据绑定

       1.实例 :

       2.验证 :

三、数据渲染

       1.单向渲染 :

       2.双向渲染 :

四、事件绑定

       1.简介 :

       2.实例 :

五、修饰符

       1.简介 :

       2.实例 :

       3.扩展 :


一、Vue快速入门

       1.简介 :  

      (1)Vue[/vju/],是Vue.js的简称,是一个前端框架,常用于构建前端用户界面。

       (2) Vue的核心库只关注视图层,易于上手,且支持和其他类库结合使用,便于与第三方库或项目整合,在开发复杂的单页应用时非常方便。

       2.MVVM :

               (1)MVVM分别指Model(模型,包括数据及对数据的操作), View(视图,页面渲染结果), ViewModel(模型与视图间的双向操作)

               (2) Vue即是一个MVVM结构的前端框架,通过ViewModel中的Data Bingdings完成从M --> V的映射,通过ViewModel中的DOM Listeners完成从V --> M的事件监听

              (3) VM将DOM相关的操作封装起来,使开发人员只需要重点关注View 和 Model本身,而不需要关心View和Model之间具体是如何映射的,大大提高了开发效率

               其示意图如下 :

image.gif编辑

       3.准备工作 :

               首先需要到Vue官网下载vue.js,链接如下 :

               https://v2.cn.vuejs.org/v2/guide/installation.html

               点击“开发版本”即可进行下载(以Vue2作为演示版本),如下图所示 :

image.gif编辑

               还需要在IDEA的Settings-->Plugins中,搜索并下载Vue.js插件,以保证IDEA可以识别Vue代码。如下图所示 :

image.gif编辑

               最后,在需要使用Vue的Project中,将官网下载的vue.js文件拷贝到Project中,如下图所示 :

image.gif编辑


二、数据绑定

       1.实例 :

               first_vue.html代码如下 :

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Vue---1st demo</title>
    <!-- 导入vue.js文件 -->
    <script type="text/javascript" src="../vue.js"></script>
</head>
<body>
    <!--
        定义一个div标签, 该标签的定义要在创建Vue实例之前,
        否则Vue实例无法挂载成功。
    -->
    <div id="div01">
        <h1>Hello!{{preface}}</h1>
        <h1>My name is {{blogger}}</h1>
    </div>
    <script type="text/javascript">
        /*
            (1)创建一个Vue实例;
            (2)el:"#div01",---表示将创建好的Vue实例挂载到id = div01的元素上
            (3)data属性表示数据池,其中保存了很多以"key-value"形式存放的数据。
                //data中的key可以由程序员手动定义
            (4){{key}}表示插值表达式,其中的数据来自model中的data数据池,
                //代码执行过程中,会到data数据池中尝试匹配数据,若匹配成功则进行替换
                //若匹配失败则显示为空串
         */
        let vm = new Vue({
            el:"#div01",
            data:{
                preface:"This is the first time to try Vue.",
                blogger:"Cyan_RA9"
            }
        });
    </script>
</body>
</html>

image.gif

               运行结果 :

image.gif编辑

       2.验证 :

               在控制台输出创建的Vue实例,查看对象的结构,如下图所示 :

image.gif编辑

               可以在Vue实例中,找到它维护的数据池data(包装成了_data),如下图所示 :

image.gif编辑

               还可以找到DOM Listeners的相关组件,如下图所示 :

image.gif编辑

               此时,如果在控制台修改Model中数据的值,就会通过Data Bindings自动更新View中显示的内容,如下图所示 :

image.gif编辑


三、数据渲染

       1.单向渲染 :

               (1) 使用插值表达式引用data数据池中的数据适用于一个标签的起始标签和结束标签之间,而不能在标签元素的属性上引用

               (2)若想在标签元素的属性上引用data数据池,需要用到v-bind;格式为 v-bind:property_name="value",有时亦可简写为 :property_name="value"

               以显示图片为例,one_way.html代码如下 :

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>One-way Rendering</title>
    <script type="text/javascript" src="../vue.js"></script>
</head>
<body>
    <div id="app">
        <h1>{{heavenlyBody}}</h1>
        <!-- 插值表达式无法在标签的属性中起作用,如下 -->
        <img src="{{src}}"/>
        <!-- 此处应该使用v-bind进行单向数据渲染,如下 -->
        <img v-bind:src="img_src" v-bind:width="img_width"/>
        <img v-bind:src="img_src" v-bind:width="img_width"/>
        <!-- 简写 -->
        <img :src="img_src" :width="img_width"/>
    </div>
    <!-- 创建Vue实例,并将其挂载到id=app的div上 -->
    <script type="text/javascript">
        let vm = new Vue({
            el:"#app",
            data:{
                heavenlyBody:"Sun",
                img_src:"../sun.png",
                img_width:"300px",
            }
        });
    </script>
</body>
</html>

image.gif

               运行结果 :

image.gif编辑

       2.双向渲染 :

               数据双向渲染需要用到v-model指令.

               以文本框的相互影响为例,two_way.html代码如下 :

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Two-way Rendering</title>
    <script type="text/javascript" src="../vue.js"></script>
</head>
<body>
    <div id="app">
        <!-- 使用插值表达式取出data数据池中的数据 -->
        <h2>{{preface}} ---{{blogger}}</h2>
        <h3>Please input your fond color in the text bow below:</h3>
        <div>
            <!--
                (1)第一个input标签使用双向渲染,即Model -- View之间互相映射的实现。
                (2)当第一个input标签中的value改变时,会通过v-model双向渲染
                    修改data数据池中color属性的值,进而,下面的第二个input标签
                    以及p标签中都使用了v-bind:单向渲染,可以同步data中color数据的更新。
             -->
            <input type="text" name="color1" v-model="color"/>
        </div>
        <div>
            <!--
                第二个input标签使用单向渲染,使得data中的color变化时,
                能够反应到该input标签中。即Model到View的映射实现
             -->
            <input type="text" name="color2" v-bind:value="color"/>
        </div>
        <p><font v-bind:color="color">The color you like is: {{color}}</font></p>
    </div>
    <script type="text/javascript">
        let vm = new Vue({
            el: "#app",
            data: {
                preface: "Test two-way data Rendering~",
                blogger: "Cyan_RA9",
                color: "pink"
            }
        })
    </script>
</body>
</html>

image.gif

               运行效果 : (如下GIF图)

image.gif编辑

四、事件绑定

       1.简介 :

      (1) 在Vue中,通过"v-on:事件名"可以绑定事件,eg : v-on:click表示绑定点击事件。

       (2) 触发事件时调用的方法,定义在Vue实例中声明的methods属性(结点)中

       2.实例 :

               以绑定点击事件click为例,event.html代码如下 :

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Event binding</title>
    <script type="text/javascript" src="../vue.js"></script>
</head>
<body>
    <div id="app">
        <h1>{{preface}}</h1>
        <input type="button" v-on:click="testClick_1()" value="点我点我"/> <br/><br/>
        <!--
            当触发事件的回调函数不需要传入形参时,可以省略()
            PS : 需要浏览器支持
         -->
        <input type="button" v-on:click="testClick_2" value="别点他,点我!"/> <br/><br/>
        <input type="button" v-on:click="testClick_3" value="牛魔,点我才对!"/> <br/><br/>
        <!-- "v-on:"亦可简写为@, 同样需要浏览器的支持. -->
        <input type="button" @click="testClick_4" value="牛魔,点我才对!"/> <br/><br/>
    </div>
    <script>
        let vm = new Vue({
            //el 即 element的简写
            el:"#app",
            data:{
                preface:"This a demonstration about Vue's events processing."
            },
            methods:{
                testClick_1() {
                    alert("原神,启动!");
                },
                testClick_2() {
                    alert("op能不能收着点味儿?");
                },
                testClick_3() {
                    alert("😅😅😅😅😅");
                },
                testClick_4() {
                    alert("嘤嘤嘤");
                }
            }
        })
    </script>
</body>
</html>

image.gif

               运行效果:(如下GIF图)

image.gif编辑


五、修饰符

       1.简介 :

       修饰符Modifiers是由点.开头的指令后缀来表示的,指出某个指令以特殊方式进行绑定

       常见修饰符如下——

    •        .stop
    •        .prevent
    •        .capture
    •        .self
    •        .once
    •        .passive
    <!-- 阻止单击事件继续传播 -->
    <a v-on:click.stop="doThis"></a>
    <!-- 提交事件不再重载页面 -->
    <form v-on:submit.prevent="onSubmit"></form>
    <!-- 修饰符可以串联 -->
    <a v-on:click.stop.prevent="doThat"></a>
    <!-- 只有修饰符 -->
    <form v-on:submit.prevent></form>
    <!-- 添加事件监听器时使用事件捕获模式 -->
    <!-- 即内部元素触发的事件先在此处理,然后才交由内部元素进行处理 -->
    <div v-on:click.capture="doThis">...</div>
    <!-- 只当在 event.target 是当前元素自身时触发处理函数 -->
    <!-- 即事件不是从内部元素触发的 -->
    <div v-on:click.self="doThat">...</div>
    image.gif

           此外,Vue 允许为v-on:在监听键盘事件时添加按键修饰符,eg :

    <!-- 只有在 `key` 是 `Enter` 时调用 `vm.submit()` -->
    <input v-on:keyup.enter="submit">
    image.gif

           2.实例 :

                   在开发中,有时不希望将整个表单进行提交,而是以Ajax方式进行提交,这样,可以有选择性的提交数据,实现局部刷新,不会导致页面重载。

                   以表单提交为例,使用.prevent修饰符阻止表单的正常提交,改为调用自定义的回调函数,在函数中进行相应的业务处理(此处为判断用户名是否为空)。

                   modifiers_demo.html代码如下 :

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Demonstrate Modifiers</title>
        <script type="text/javascript" src="../vue.js"></script>
    </head>
    <body>
        <div id="app">
            <!--
                .prevent修饰符的存在,使得form表单默认的提交方式失效,
                触发submit事件时会调用绑定的onMySubmit函数。
             -->
            <form action="https://www.baidu.com" v-on:submit.prevent="onMySubmit">
                Username : <input type="text" v-model="user.username"/> <br/><br/>
                <input type="submit" value="Submit"/>
            </form>
        </div>
        <script type="text/javascript">
            let vm = new Vue ({
                el:"#app",
                data: {
                    //以对象的形式提供数据(通过v-model数据双向渲染动态生成)
                    user: {
                    }
                },
                methods:{
                    onMySubmit() {
                        if (this.user.username) {   //当作布尔值使用
                            alert("为世界上所有的美好而战!");
                            console.log("username =",this.user.username);
                        } else {
                            console.log("请输入用户名捏~");
                        }
                    }
                }
            })
        </script>
    </body>
    </html>

    image.gif

                   运行效果 : (如下GIF图)

    image.gif编辑

           3.扩展 :

                   演示.once修饰符,"v-on:click.once"表示该点击事件在同一次页面只能触发一次。

                   extensive_modifiers.html代码如下 :

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Demonstrate keyModifiers</title>
        <script type="text/javascript" src="../vue.js"></script>
    </head>
    <body>
        <div id="app">
            <button v-on:click.once="onMyClick">你只能点我一次捏~不信试试看</button>
        </div>
        <script type="text/javascript">
            let vm = new Vue({
                el:"#app",
                data: {
                    name:"Cyan"
                },
                methods: {
                    onMyClick() {
                        alert(this.name + "_RA9");
                    }
                }
            })
        </script>
    </body>
    </html>

    image.gif

                   运行效果 : (如下GIF)

    image.gif编辑

                   演示按键修饰符,"v-on:keyup.enter"表示按下键盘上的"Enter"键时会触发该事件,继而调用相应的函数。

                   key_modifiers.html代码如下 :

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Demonstrate key modifiers</title>
        <script type="text/javascript" src="../vue.js"></script>
    </head>
    <body>
        <div id="app">
            <form action="#">
                Color : <input type="text" v-model="element.color" v-on:keyup.enter="onMySubmit"/> <br/>
            </form>
        </div>
        <script type="text/javascript">
            let vm = new Vue({
                el: "#app",
                data: {
                    element: {
                    }
                },
                methods: {
                    onMySubmit() {
                        alert("你按下了Enter键~")
                    }
                }
            })
        </script>
    </body>
    </html>

    image.gif

                   运行效果:(如下GIF图)

    image.gif编辑

          System.out.println("END------------------------------------------------------------");

    目录
    相关文章
    |
    3月前
    |
    人工智能 JavaScript 算法
    Vue 中 key 属性的深入解析:改变 key 导致组件销毁与重建
    Vue 中 key 属性的深入解析:改变 key 导致组件销毁与重建
    497 0
    |
    3月前
    |
    JavaScript UED
    用组件懒加载优化Vue应用性能
    用组件懒加载优化Vue应用性能
    |
    3月前
    |
    JavaScript 前端开发 开发者
    Vue 自定义进度条组件封装及使用方法详解
    这是一篇关于自定义进度条组件的使用指南和开发文档。文章详细介绍了如何在Vue项目中引入、注册并使用该组件,包括基础与高级示例。组件支持分段配置(如颜色、文本)、动画效果及超出进度提示等功能。同时提供了完整的代码实现,支持全局注册,并提出了优化建议,如主题支持、响应式设计等,帮助开发者更灵活地集成和定制进度条组件。资源链接已提供,适合前端开发者参考学习。
    346 17
    |
    3月前
    |
    JavaScript 前端开发 UED
    Vue 表情包输入组件实现代码及详细开发流程解析
    这是一篇关于 Vue 表情包输入组件的使用方法与封装指南的文章。通过安装依赖、全局注册和局部使用,可以快速集成表情包功能到 Vue 项目中。文章还详细介绍了组件的封装实现、高级配置(如自定义表情列表、主题定制、动画效果和懒加载)以及完整集成示例。开发者可根据需求扩展功能,例如 GIF 搜索或自定义表情上传,提升用户体验。资源链接提供进一步学习材料。
    187 1
    |
    5月前
    |
    JavaScript
    vue实现任务周期cron表达式选择组件
    vue实现任务周期cron表达式选择组件
    680 4
    |
    4月前
    |
    JavaScript 数据可视化 前端开发
    基于 Vue 与 D3 的可拖拽拓扑图技术方案及应用案例解析
    本文介绍了基于Vue和D3实现可拖拽拓扑图的技术方案与应用实例。通过Vue构建用户界面和交互逻辑,结合D3强大的数据可视化能力,实现了力导向布局、节点拖拽、交互事件等功能。文章详细讲解了数据模型设计、拖拽功能实现、组件封装及高级扩展(如节点类型定制、连接样式优化等),并提供了性能优化方案以应对大数据量场景。最终,展示了基础网络拓扑、实时更新拓扑等应用实例,为开发者提供了一套完整的实现思路和实践经验。
    504 77
    |
    5月前
    |
    缓存 JavaScript 前端开发
    Vue 基础语法介绍
    Vue 基础语法介绍
    |
    3月前
    |
    监控 JavaScript 前端开发
    Vue 文件批量下载组件封装完整使用方法及优化方案解析
    本文详细介绍了批量下载功能的技术实现与组件封装方案。主要包括两种实现方式:**前端打包方案(基于file-saver和jszip)** 和 **后端打包方案**。前者通过前端直接将文件打包为ZIP下载,适合小文件场景;后者由后端生成ZIP文件流返回,适用于大文件或大量文件下载。同时,提供了可复用的Vue组件`BatchDownload`,支持进度条、失败提示等功能。此外,还扩展了下载进度监控和断点续传等高级功能,并针对跨域、性能优化及用户体验改进提出了建议。可根据实际需求选择合适方案并快速集成到项目中。
    330 17
    |
    3月前
    |
    JavaScript 前端开发 UED
    Vue 手风琴实现的三种常用方式及长尾关键词解析
    手风琴效果是Vue开发中常见的交互组件,可节省页面空间、提升用户体验。本文介绍三种实现方式:1) 原生Vue结合数据绑定与CSS动画;2) 使用Element UI等组件库快速构建;3) 自定义指令操作DOM实现独特效果。每种方式适用于不同场景,可根据项目需求选择。示例包括产品特性页、后台菜单及FAQ展示,灵活满足多样需求。附代码示例与资源链接,助你高效实现手风琴功能。
    144 10
    |
    3月前
    |
    JavaScript 前端开发 UED
    Vue 表情包输入组件的实现代码:支持自定义表情库、快捷键发送和输入框联动的聊天表情解决方案
    本文详细介绍了在 Vue 项目中实现一个功能完善、交互友好的表情包输入组件的方法,并提供了具体的应用实例。组件设计包含表情分类展示、响应式布局、与输入框的交互及样式定制等功能。通过核心技术实现,如将表情插入输入框光标位置和点击外部关闭选择器,确保用户体验流畅。同时探讨了性能优化策略,如懒加载和虚拟滚动,以及扩展性方案,如自定义主题和国际化支持。最终,展示了如何在聊天界面中集成该组件,为用户提供丰富的表情输入体验。
    283 8