详解Vue的数据及事件绑定和filter过滤器

目录
  • Vue数据绑定
    • 单向绑定
    • 双向绑定
    • 值绑定
  • 事件绑定
    • 事件处理器
    • 事件修饰符
    • 键值修饰符
  • class与style绑定
    • 绑定class
    • 绑定内联样式
  • filter过滤器
  • 总结

Vue数据绑定

单向绑定

将Model绑定到View后,当用JavaScript代码更新Model时,View会自动更新。(模型——>视图

单向绑定的实现过程是:

  • 所有数据只保存一份。
  • 一旦数据变化,就去更新页面(只有data——>DOM,没有DOM——>data)
  • 若用户在页面上做了更新,就手动收集(双向绑定式自动收集),合并到原有的数据中。

单向绑定的应用:

(1)插值绑定:是数据绑定的基本形式,用{{}}实现。

(2)v-bind绑定:如果HTML的某些属性可以支持单向绑定,那么只要在该属性前面加上v-bind指令,这样Vue在解析时会识别出该指令,将属性值和Vue实例的Model进行绑定。

然后就可以通过Model来动态操作该属性,从而实现DOM的联动更新。

例如:

<div id="app">
    <img v-bind:src='src' :title="title">
</div>
<script>
    new Vue({
        el:'#app',
        data:{
            src:'../images/8.png.jpeg',   //修改Model后,视图也跟着改变
            title:'蝴蝶'
        }
    })
</script>

双向绑定

Vue框架的核心功能就是数据双向绑定。

双向绑定:把Model绑定到View的同时也将View绑定到Model上,这样既可以通过更新Model来实现View的自动更新,也可以通过更新View来实现Model数据的更新。

能够实现数据双向绑定的元素——表单元素(input、textarea、select等),使用v-model指令绑定。

内容复制方式:相当于浅拷贝

例如:

<div id="app">
   <h2>{{message}}</h2>
   <input type="text" v-model="message">
</div>
<script>
   var vm=new Vue({
       el:'#app',
       data:{
           message:'数据双向绑定'
       }
   })
</script>
  • 模型影响视图:data数据message变了,div里面的内容变了;
  • 视图影响模型:input输入框的内容改变,data里面的message也改变,从而h2里面的内容也改变 。

值绑定

v-model用来在View与Model之间同步数据。

但是有时候需要控制同步发生的时机,或者在数据同步到Model前将数据转换为Number类型——在v-model指令所在的form控件上添加相应的修饰指令

修饰符:

.lazy(懒加载)修饰符

<div id="app">
    <input type="text" v-model.lazy='msg'>
    <p>{{msg}}</p>
</div>
<script>
    new Vue({
        el:'#app',
        data:{
            msg:'懒加载'
        }
    })
</script>

  • .number修饰符
  • .trim修饰符

例如:

<div id="app">
    <input type="text" v-model.number='num'>
    <p>num的类型:{{typeof(num)}}</p>
    <!--<input type="text" v-model.trim="val">  -->
    <!--<p>val的长度是:{{ val.length }}</p>  -->
</div>
<script>
    new Vue({
        el:'#app',
        data:{
            num:''
        }
    })
</script>

事件绑定

通过v-on指令来绑定事件。

事件处理器

(1)方法处理器:可以用v-on指令监听DOM事件。(直接绑定到一个方法

(2)内联语句处理器:除了直接绑定到一个方法,也可以用内联 JavaScript 语句

<div id="example">
    <button v-on:click="say('hi')">Say Hi</button>       //内联语句处理器
    <button v-on:click="say('what')">Say What</button>
	<!-- <a href="https://www.baidu.com" v-on:click="say('hello',$event)">
去百度</a>  -->       //内联语句处理器中访问原生 DOM 事件
</div>
<script>
    new Vue({
        el: '#example',
        methods: {
            say: function (msg) {
                alert(msg)
            }
            //say: function (msg,event) {
                   // event.preventDefault()
               // }
        }
    })
</script>

注意:没有括号的是函数名;有括号的实际是一条JS语句,称为内联处理器。

事件修饰符

  • .stop - 阻止冒泡
  • .prevent - 阻止默认事件
  • .capture - 使用capture模式添加事件监听器
  • .self - 只监听触发该元素的事件
  • .once - 只触发一次

例如:

<a v-on:click.stop="doThis"></a>
<div v-on:click.capture="doThis">...</div>

键值修饰符

  • .enter - enter事件
  • .left - 左键事件
  • .right - 右键事件
  • .middle - 中间滚轮事件

例如:

<input v-on:keyup.enter="submit"><!-- 缩写语法 --><input @keyup.enter="submit"><input v-on:keyup.enter="submit">
<!-- 缩写语法 -->
<input @keyup.enter="submit">

class与style绑定

绑定class

可以给v-bind:class传一个对象或数组,通过v-on绑定事件改变样式。

<div id="example" v-bind:class="colorName" v-on:click="changeColor">

<div id="example" v-bind:class="[class1,class2]" v-on:click="changeColor"></div>

绑定内联样式

v-bind:style传一个对象或数组。

<div v-bind:style="{color:fontColor,fontSize:mySize}">西柚
 data: {
    fontColor: 'white',
    mySize: '30px'
 }

<div v-bind:style="[baseStyles,vueStyles]">西安邮电大学</div>
 data: {
     baseStyles:{ 'color': 'red'},
     vueStyles: { 'font-size':'35px'}
 }

filter过滤器

1、在Vue.js中,过滤器主要用于

  • 文本格式化
  • 日期格式化
  • 数组数据的过滤

2、使用的位置

(1)插值表达式:({表达式|过滤器})

{{ message | filterA }}

(2)v-bind:属性|过滤器

<div v-bind:id="rawId | formatId"></div>

3、使用方法:管道符(|)

4、本质:本质是一个函数

5、分类:

(1)全局过滤器

Vue.filter(‘过滤器名',function(){
实现过滤功能
})
Vue.filter('filterA',function (value) {
    return value+'Hello'
})
new Vue({})

(2)局部过滤器:在Vue实例中通过filter选项来定义

new Vue({
	el:'#id',
	//filters{
		//过滤器名:function(参数){
		//过滤功能
		//}
	//}
	filters:{     //局部过滤器,只能在当前vue实例绑定的div里面用
		filterA:function(value){
			return value+'Hello'
		}
	}
})

(3)过滤器的串联

{{ message | filterA | filterB }}

message作为参数——>过滤器函数filterA——>过滤器filterB

或者:

{{ message | filterA('arg1', arg2) }}

filterA 被定义为接收三个参数的过滤器函数。其中 message 的值作为第一个参数, ‘arg1’ 作为第二个参数,arg2 的值作为第三个参数。

例如:

<div id="app">
    <p>{{'2022'|filterA|filterB}}</p>
</div>
<script>
    new Vue({
        el:'#app',
        filters:{
            filterA:function(value){
                return value+' is'
            },
            filterB:function(value){
                return value+' coming!'
            }
        }
    })
</script>

总结

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注我们的更多内容!

(0)

相关推荐

  • Vue过滤器(filter)实现及应用场景详解

    1. 简单介绍 Vue.js 允许你自定义过滤器(filter),可被用于一些常见的文本格式化. 过滤器可以用在两个地方:双花括号插值和 v-bind 表达式 (后者从 2.1.0+ 开始支持). 过滤器应该被添加在 JavaScript 表达式的尾部,由"管道"符号指示: <!-- 在双花括号中 --> {{ message | filter }} <!-- 在 `v-bind` 中 --> <div v-bind:msg="message |

  • Vue过滤器filters的用法及时间戳转换问题

    目录 一.速识概念: 二.局部过滤器: 三.全局过滤器: 四.扩展: 五.总结: 本文分享自华为云社区<三分钟掌握Vue过滤器filters及时间戳转换>,作者:北极光之夜.. 一.速识概念: 大家好呀,Vue的filters过滤器是比较常见的一个知识点,下面我将结合时间戳转换的例子带你快速了解filters的用法~ 按照官方的活来说,Vue.js 允许你自定义过滤器,可被用于一些常见的文本格式化.过滤器可以用在两个地方:双花括号插值和 v-bind 表达式 (后者从 2.1.0+ 开始支持)

  • 详解Vue 动态组件与全局事件绑定总结

    最近在自学 Vue 也了解了一些基本用法,也记录了一些笔记有兴趣的朋友可以去查看我的其他文章,技术这东西真的不能光靠看,看是没有的,你必须要动手实践,只有在实战项目中才能发现问题,才能发现我们没有掌握的知识点,然后发现问题解决问题,我们的能力才能得以提升,要不然就有点眼高手低了. 基于这个想法于是就开始自己去撸了一个旅游网站,旅游网站嘛避免不了城市的选择,所以在实现城市选择列表的时候碰到的一些问题,以及解决办法今天就记录下来做一个总结. 城市列表选择组件 首先说说我们要实现一个什么样的城市选择组

  • VUE的数据代理与事件详解

    目录 回顾Object.defineProperty方法 何为数据代理 Vue中的数据代理 事件的基本使用 事件的修饰符 键盘事件 总结 回顾Object.defineProperty方法 <!DOCTYPE html> <html> <head> <meta charset="UTF-8" /> <title>回顾Object.defineproperty方法</title> </head> <

  • 浅谈vue实现双向事件绑定v-model的原理

    目录 解释: 总结 补充 与js或者jquery直接改变操作dom不同,vue使用v-model实现数据的双向绑定,它会根据控件类型自动选取正确的方法来更新元素. v-model就是vue的双向绑定的指令,能将页面上控件输入的值同步更新到相关绑定的data属性,也会在更新data绑定属性时候,更新页面上输入控件的值 官方文档这么解释: v-model只不过是一个语法糖而已,真正的实现靠的还是 v-bind:绑定响应式数据 触发 input 事件 并传递数据 (核心和重点) 如下代码 <input

  • 详解Vue的数据及事件绑定和filter过滤器

    目录 Vue数据绑定 单向绑定 双向绑定 值绑定 事件绑定 事件处理器 事件修饰符 键值修饰符 class与style绑定 绑定class 绑定内联样式 filter过滤器 总结 Vue数据绑定 单向绑定 将Model绑定到View后,当用JavaScript代码更新Model时,View会自动更新.(模型——>视图) 单向绑定的实现过程是: 所有数据只保存一份. 一旦数据变化,就去更新页面(只有data——>DOM,没有DOM——>data) 若用户在页面上做了更新,就手动收集(双向绑

  • 详解vue的数据binding绑定原理

    自从angular火了以后,各种mvc框架喷涌而出,angular虽然比较火,但是他的坑还是蛮多的,还有许多性能问题被人们吐槽.比如坑爹的脏检查机制,数据binding是受人喜爱的,脏检查就有点-性能低下了.有时候改了一个地方,脏循环要循环多次来保证数据是不是真的变了和是否停止变化了.这样性能就很低了.于是人们开始钻研新的双向数据binding的方法.尤大的vue binding就是本人蛮喜欢的一种实现方式,本文跟随尤大的一个例子来详解vue的数据binding的原理. 数据binding,一般

  • 详解vue中v-model和v-bind绑定数据的异同

    vue的模板采用DOM模板,也就是说它的模板可以当做DOM节点运行,在浏览器下不报错,绑定数据有三种方式,一种是插值,也就是{{name}}的形式,一种是v-bind,还有一种是v-model.{{name}}的形式比较好理解,就是以文本的形式和实例data中对应的属性进行绑定.比如: var app = new Vue({ el: '#app', template: '<div @click="toggleName">{{name}}</div>', data

  • 详解vue的数据劫持以及操作数组的坑

    TL;DR 给data添加新属性的时候vm.$set(vm.info,'newKey','newValue') data上面属性值是数组的时候,需要用数组的方法操作数组,而不能通过index或者length属性去操作数组,因为监听不到属性操作的动作. 安装和初使用vue vue是构建用户界面的渐进式框架.所谓的渐进式:vue + components + vue-router + vuex + vue-cli可以根据需要选择相应的功能. 来串命令mkdir vue-apply;cd vue-ap

  • 详解Vue.js Class与Style绑定

    目录 Vue.js Class与Style绑定 绑定HTML Class 对象语法 数组语法 绑定内联样式 对象语法 数组语法 自动添加前缀 总结 Vue.js Class与Style绑定 对于数据绑定,一个常见的需求是操作元素的class列表和它的内联样式.因为它们都是attribute,我们可以用v-bind处理它们:只需要计算出表达式最终的字符串.不过,字符串拼接麻烦又易错.因此,在v-bind用于class和style时,Vue.js专门增强了它.表达式的结果类型除了字符串以外,还可以是

  • 详解vue.js数据传递以及数据分发slot

    一.组件间的数据传递 1.父组件获取子组件的数据 *子组件把自己的数据,发送到父级 *vm.$emit(事件名,数据); *v-on: @ 示例用法:当点击send按钮的时候,"111"变成"我是子组件的数据" <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>父级获取子级的数据

  • 详解vue前后台数据交互vue-resource文档

    这两天学习了vue-resource插件个地方知识点挺多的,而且很重要,所以,今天添加一点小笔记. Vue可以构建一个完全不依赖后端服务的应用,同时也可以与服务端进行数据交互来同步界面的动态更新. Vue通过插件的形式实现了基于AJAX,JSPNP等技术的服务端通信. vue-resource是一个通过XMLHttpRequrest或JSONP技术实现异步加载服务端数据的Vue插件 提供了一般的 HTTP请求接口和RESTful架构请求接口,并且提供了全局方法和VUe组件实例方法. 使用的版本是

  • 详解Vue文档中几个易忽视部分的剖析

    针对Vue文档中部分大家可能不会去研读的内容,我做了个小总结,作为有经验者的快餐,不是特别适合初学者,可能有不妥之处,希望大家多提建议. 节省代码量的mixin mixin概念:组件级可复用逻辑,包括数据变量/生命周期钩子/公共方法,从而在混入的组件中可以直接使用,不用重复写冗余逻辑(类似继承) 使用方法: 在某一公共文件夹pub下创建mixin文件夹,其下创建mixinTest.js const mixinTest = { created() { console.log(`components

  • 详解vue 表单绑定与组件

    一.什么是双向数据绑定 Vue.js是一个MV VM框架, 即数据双向绑定, 即当数据发生变化的时候, 视图也就发生变化, 当视图发生变化的时候,数据也会跟着同步变化.这也算是Vue.js的精髓之处了.   值得注意的是,我们所说的数据双向绑定,一定是对于UI控件来说的非UI控件不会涉及到数据双向绑定.单向数据绑定是使用状态管理工具的前提.如果我们使用vue x那么数据流也是单项的,这时就会和双向数据绑定有冲突. 1.为什么要实现数据的双向绑定 在Vue.js中,如果使用vuex, 实际上数据还

  • 详解vue中v-on事件监听指令的基本用法

    一.本节说明 我们在开发过程中经常需要监听用户的输入,比如:用户的点击事件.拖拽事件.键盘事件等等.这就需要用到我们下面要学习的内容v-on指令. 我们通过一个简单的计数器的例子,来讲解v-on指令的使用. 二. 怎么做 定义数据counter,用于表示计数器数字,初始值设置为0 v-on:click 表示当发生点击事件的时候,触发等号里面的表达式或者函数 表达式counter++和counter--分别实现计数器数值的加1和减1操作 语法糖:我们可以将v-on:click简写为@click 三

随机推荐