Vue数据与事件绑定以及Class和Style的绑定详细讲解

 更新时间:2023年01月14日 11:30:46   作者:鸣鲷有柒  
这篇文章主要介绍了Vue数据与事件绑定以及Class和Style的绑定,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧

一、Vue的数据绑定

1. 单向数据绑定:将Model绑定到View上,当通过JavaScript代码改变了Model时,View就会自动刷新。不需要进行额外的DOM操作就可以实现视图和模型的联动

​ a. 数据只保存一份

​ b. data—->DOM

​ (1)插值表达式:{{ 表达式 }},将表达式的值在View中显示出来

​ (2)v-bind:将标签的属性绑定到指定的变量上。简写方式: 属性名=“变量名”

2. 双向数据绑定:是Vue的核心特征之一。将Model绑定到View上,同时将View和Model进行绑定。即当Model的数据发生改变时,View会自动更新;当View的数据发生改变时,Model的数据也会更新。

强调:在Vue中只有表单元素才能实现双向绑定(input、textarea、select),实现指令是v-model

​ (1)文本框(text’的绑定:和普通的变量进行绑定

​ (2)复选框(checkbox)的绑定:绑定的变量必须是数组

​ (3)单选框(radio)的绑定:绑定普通的变量

​ (4)下拉列表(select)的绑定:当下拉列表为单选时,绑定的变量为普通变量;当下拉列表为多选时,绑定的变量自动转换为数组

3. 值绑定的时机(数据同步的时机):v-model指令可以实现Model和View的数据同步

​ (1).lazy(懒加载):在input失去焦点或按下回车键时才进行更新

            <label>
                用户名:<input type="text" v-model.lazy="userName">
            </label>

(2).number:将输入的数据转换成Number类型。在input中输入的虽然是数字,但实际是string,为了将字符串转换为数字,加上该修饰符实现自动转换

            <label>
                年龄:<input type="number" v-model.number="userAge">
            </label>
        <p>年龄:{{userAge}},数据类型:{{typeof(userAge)}}</p>

(3).trim:会自动过滤掉输入的首尾空格

<label> 用户名:<input type="text" v-model.trim="userName"> </label>

二、Vue的事件绑定

通过v-on指令绑定,v-on:原生的事件名(@原生事件名)

1. 方法处理器方式:v-on:原生事件名 = 函数名

    <script src="../js/vue.js"></script>
<body>
    <div id="app">
        <p>{{msg}}</p>
        <!-- <button @click="changeMsg">修改</button> -->
        <button v-on:click="changeMsg()">修改</button>
    </div>
    <script>
        const vm = new Vue({
            el:'#app',
            data:{
                msg:'Hello World!'
            },
            methods:{
                changeMsg(){
                  this.msg='曲江池'  
                }
            }
        })
    </script>
</body>

2. 内联语句处理器方式:本质是内联了javascript语句

    <script src="../js/vue.js"></script>
<body>
    <div id="app">
        <p>{{msg}}</p>
        <button v-on:click="changeMsg('大雁塔')">修改</button>
    </div>
    <script>
        const vm = new Vue({
            el:'#app',
            data:{
                msg:'Hello World!'
            },
            methods:{
                changeMsg(info){
                  this.msg=info  
                }
            }
        })
    </script>
</body>

3. 在内联语句中访问原生的DOM事件

    <script src="../js/vue.js"></script>
<body>
    <div id="app">
        <p>{{msg}}</p>
        <!-- <button v-on:click="changeMsg('大雁塔')">修改</button> -->
        <br><br>
        <a href="http://www.baidu.com" rel="external nofollow"  v-on:click="say($event)">百度一下</a>
    </div>
    <script>
        const vm = new Vue({
            el:'#app',
            data:{
                msg:'Hello World!'
            },
            methods:{
                changeMsg(){
                  this.msg='曲江池'  
                },
                // say(event){
                //     event.preventDefault()
                // },
                say:function(event){
                    event.preventDefault()
                }
            }
        })
    </script>
</body>

4. 事件绑定中的修饰符

​ (1).prevent:调用preventDefault()。阻止链接打开URL

<a href="http://www.bilibili.com" rel="external nofollow"  v-on:click.prevent>bilibili</a>

(2).stop:调用stopPropagation()。阻止事件传播(阻止事件冒泡)

​(3)键值修饰符:在监听键盘事件时,需要知道键的keyCode,记忆不方便,可以通过修饰符来记录键值

​ enter、tab、delete、esc、space、up、down、left、right

    <script src="../js/vue.js"></script>
<body>
    <div id="app">
        <button v-on:keyup.up="say">提交</button>
    </div>
    <script>
        const vm = new Vue({
            el:'#app',
            data:{
                msg:'键盘修饰符',
            },
            methods:{
                say(){
                    alert(this.msg)
                }
            }
        })
    </script>
</body>

三、Class和Style的绑定

1. 对象语法:给v-bind:class传递一个对象,来动态地改变class属性值

    <script src="../js/vue.js"></script>
<style>
    div {
        width: 100px;
        height: 100px;
    }
    .class1 {
        background-color: #ff0;
    }
    .class2 {
        background-color: #f00;
    }
</style>
<body>
    <div id="app" v-bind:class="colorName" v-on:click="changeColor"></div>
    <script>
        const vm = new Vue({
            el: '#app',
            data:{
                colorName:{
                    class1:true,
                    class2:false
                }
            },
            methods: {
                changeColor() {
                    this.colorName.class1 = !this.colorName.class1
                    this.colorName.class2 = !this.colorName.class2
                }
            }
        })
    </script>
</body>

2. 数组语法:可以把一个数组传给v-bind:class,以应用一个class列表

    <script src="../js/vue.js"></script>
<style>
    div {
        width: 100px;
        height: 100px;
    }
    .class1 {
        background-color: #ff0;
    }
    .class2 {
        background-color: #f00;
    }
</style>
<body>
    <div id="app" v-bind:class="[c1,c2]" v-on:click="changeColor"></div>
    <script>
        const vm = new Vue({
            el: '#app',
            data: {
                c1: 'class1',
                c2: '',
            },
            methods: {
                changeColor() {
                    this.c1 = (this.c1 == '' ? 'class1' : '')
                    this.c2 = (this.c2 == '' ? 'class2' : '')
                }
            }
        })
    </script>
</body>

3. 内联样式绑定:直接绑定style(v-bind:style)

(1)对象表示法

    <script src="../js/vue.js"></script>
<style>
    div {
        width: 100px;
        height: 100px;
    }
    .class1 {
        background-color: #ff0;
    }
    .class2 {
        background-color: #f00;
    }
</style>
<body>
    <div id="app" v-bind:class="[c1,c2]" v-on:click="changeColor">
        <div v-bind:style="{color:fontColor,fontSize:mySize}">白桦林</div>
    </div>
    <script>
        const vm = new Vue({
            el: '#app',
            data: {
                c1: 'class1',
                c2: '',
                fontColor:'blue',
                mySize:'18px'
            },
            methods: {
                changeColor() {
                    this.c1 = (this.c1 == '' ? 'class1' : '')
                    this.c2 = (this.c2 == '' ? 'class2' : '')
                }
            }
        })
    </script>
</body>

(2)数组表示法

    <script src="../js/vue.js"></script>
<style>
    div {
        width: 100px;
        height: 100px;
    }
    .class1 {
        background-color: #ff0;
    }
    .class2 {
        background-color: #f00;
    }
</style>
<body>
    <div id="app" v-bind:class="[c1,c2]" v-on:click="changeColor">
        <div v-bind:style="[colorStyle,fontStyle]">白桦林</div>
    </div>
    <script>
        const vm = new Vue({
            el: '#app',
            data: {
                c1: 'class1',
                c2: '',
                colorStyle:{color:'red'},
                fontStyle:{fontSize:'32px'}
            },
            methods: {
                changeColor() {
                    this.c1 = (this.c1 == '' ? 'class1' : '')
                    this.c2 = (this.c2 == '' ? 'class2' : '')
                }
            }
        })
    </script>
</body>

到此这篇关于Vue数据与事件绑定以及Class和Style的绑定详细讲解的文章就介绍到这了,更多相关Vue数据与事件绑定内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 使用Vue指令实现Markdown渲染和代码高亮

    使用Vue指令实现Markdown渲染和代码高亮

    在前端开发中,我们经常需要将Markdown格式的文本渲染成HTML并展示在页面上,同时还希望能够对代码块进行高亮显示,今天我将分享一段代码,通过Vue指令实现了这个功能,需要的朋友可以参考下
    2023-09-09
  • Vue自定义指令的使用实例介绍

    Vue自定义指令的使用实例介绍

    作为使用Vue的开发者,我们对Vue指令一定不陌生,诸如v-model、v-on、等,同时Vue也为开发者提供了自定义指令的api,熟练的使用自定义指令可以极大的提高了我们编写代码的效率,让我们可以节省时间开心的摸鱼
    2023-04-04
  • Vue-component全局注册实例

    Vue-component全局注册实例

    今天小编就为大家分享一篇Vue-component全局注册实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-09-09
  • Vue + AnimeJS实现3d轮播图的详细代码

    Vue + AnimeJS实现3d轮播图的详细代码

    轮播图在开发中是经常用到的,3D轮播图是其中最常用的一种,所以在这篇文章中将给大家介绍Vue + AnimeJS实现3d轮播图,文中有详细的代码示例供大家参考,具有一定的参考价值,需要的朋友可以参考下
    2024-01-01
  • Vue 仿QQ左滑删除组件功能

    Vue 仿QQ左滑删除组件功能

    前几天朋友在做vue项目开发时,有人反映 IOS 上面的滑动点击有点问题,让我们来帮忙解决,于是我就重写了代码,下面把vue仿qq左滑删除组件功能分享到脚本之家平台,需要的朋友参考下吧
    2018-03-03
  • 3分钟迅速学会Vue中methods方法使用技巧

    3分钟迅速学会Vue中methods方法使用技巧

    最近在学习Vue,感觉methods还是有必有总结一下的,下面这篇文章主要给大家介绍了关于3分钟迅速学会Vue中methods方法使用技巧的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2023-02-02
  • vue插件--仿微信小程序showModel实现模态提示窗功能

    vue插件--仿微信小程序showModel实现模态提示窗功能

    这篇文章主要介绍了vue插件--仿微信小程序showModel实现模态提示窗,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-08-08
  • 基于Vue实现页面全屏封装的详细步骤

    基于Vue实现页面全屏封装的详细步骤

    众所周知:目前可视化大屏,视频播放等常见功能都需要用到全屏,本文将使用两种技术实现全屏功能的封装,让不同技术栈的同学都可以轻松掌握,好了,让我们来实现一个既兼容性强又易于管理的全屏功能组件吧,需要的朋友可以参考下
    2024-08-08
  • 一起来做一下Vue全局提示组件

    一起来做一下Vue全局提示组件

    前端开发的时候,在项目中引入组件以及使用是非常常见操作,下面这篇文章主要给大家介绍了关于Vue全局提示组件的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-06-06
  • Element中el-select下拉框实现选中图标并回显图标

    Element中el-select下拉框实现选中图标并回显图标

    本文主要介绍了Element中el-select下拉框实现选中图标并回显图标,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-12-12

最新评论