vue 避免变量赋值后双向绑定的操作
如: this.list = this.list2, 结果在list改变后 list2也改变,这不是我们想要的效果
第一种:
利用 JSON.parse 和 JSON.stringify
this.list= JSON.parse( JSON.stringify(this.list2) )
第二种:
ES6 的解析语法
this.list= { ...this.list2}
this.arr= [...this.arr2]
补充知识:解决vue中v-model绑定的变量赋值给了另一个变量后,两个变量同时改变
先来看一下问题背景
我们要做一个 搜索+分页 的功能,使用vue
我们将分页控件绑定了点击事件,点击后提交v-model绑定的formData表单,但是我们忽略了一个问题,就是当输入的信息改变的情况下,不点击搜索,直接点击分页控件,提交的将会是新现在搜索框中的搜索条件。这样就不和逻辑了。
于是我们在data中新加了一个表单的对象 submitForm,只有在点击 查询 的时候,v-model绑定的 formData 表单才会赋值给这个对象,而翻页的时候提交的是 submitForm 。这样就解决了这个问题。
data() { return { formData: { timeStart: '', timeEnd: '', // 分页数据 pageNo: 1, pageSize: 10 }, submitForm: { timeStart: '', timeEnd: '', // 分页数据 pageNo: 1, pageSize: 10 }, } this.submitForm = this.formData // 用 new也是一样达不到效果 this.submitForm = new Object(this.formData)
但是!!!
submitForm 竟然跟着变了
这是因为在Object赋值的时候,传递的不是值,而是引用,他们指向了同一个空间!
解决
第一种:利用 JSON.parse 和 JSON.stringify
this.submitForm = JSON.parse( JSON.stringify(this.formData) )
第二种:ES6 的解析语法
this.submitForm = { ...this.formData }
以上这篇vue 避免变量赋值后双向绑定的操作就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。
相关推荐
-
Vue2.x和Vue3.x的双向绑定原理详解
双向的绑定的原理 通过Object.defineproperty()重新定义对象属性的set方法.get方法来实现的,从这个属性中取值时会触发get方法,改变这个属性时会触发set方法,所以我们只要将一些需要更新view的方法放在这里面就可以实现data更新view了,而view更新data其实可以通过事件监听实现 当视图上的数据发生改变时, data 中的数据也发生改变当 data 中的数据发生改变时,视图中的数据也发生改变 Object.defineProperty() Object.def
-
深入理解vue.js双向绑定的实现原理
前言 大家都知道Vue.js最核心的功能有两个,一是响应式的数据绑定系统,二是组件系统.本文仅探究几乎所有Vue的开篇介绍都会提到的hello world双向绑定是怎样实现的.先讲涉及的知识点,再参考源码,用尽可能少的代码实现那个hello world开篇示例. 一.访问器属性 访问器属性是对象中的一种特殊属性,它不能直接在对象中设置,而必须通过defineProperty()方法单独定义. var obj = { }; // 为obj定义一个名为hello的访问器属性 Object.defin
-
Vue 3.0双向绑定原理的实现方法
proxy方法 vue.js 是采用数据劫持结合发布者-订阅者模式的方式,通过new Proxy()来劫持各个属性的setter,getter,在数据变动时发布消息给订阅者,触发相应的监听回调. Vue 3.0与Vue 2.0的区别仅是数据劫持的方式由Object.defineProperty更改为Proxy代理,其他代码不变.可查看Vue 2.0双向绑定原理的实现 具体实现过程的代码如下: 1.定义构造函数 function Vue(option){ this.$el = document.q
-
vue 避免变量赋值后双向绑定的操作
如: this.list = this.list2, 结果在list改变后 list2也改变,这不是我们想要的效果 第一种: 利用 JSON.parse 和 JSON.stringify this.list= JSON.parse( JSON.stringify(this.list2) ) 第二种: ES6 的解析语法 this.list= { ...this.list2} this.arr= [...this.arr2] 补充知识:解决vue中v-model绑定的变量赋值给了另一个变量后,两个
-
VUE实现表单元素双向绑定(总结)
本文介绍了VUE实现表单元素双向绑定(总结) ,分享给大家,具体如下: checkbox最基本用法: <input type="checkbox" v-model="inputdata" checked/> <input type="checkbox" v-model="inputdata"/> <input type="checkbox" v-model="inpu
-
vue自定义组件实现v-model双向绑定数据的实例代码
项目中会遇到自定义公共组件供项目调用,正常情况可以使用 props定义参数接收父组件传的参数,然后通过子组件的$emits()方法回传数据给父组件. 类似如下: 父组件 <common-checkbox :checked="goodsSelected" class="left" :height="'16px'" :width="'16px'" @checkChange="checkChange">
-
Vue 父子组件实现数据双向绑定效果的两种方式(案例代码)
目录 方式一:通过监听事件实现 方式二:通过 v-model 实现 方式一:通过监听事件实现 父组件将数据传递给子组件通过 props 实现:而子组件将数据传递给父组件通过事件来实现,在子组件中定义一个事件,在该事件中传递值,由父组件中监听这个事件.通过这种方式实现父子组件双向绑定的效果最常见. 子组件案例代码: <template> <el-select v-model="value" placeholder="请选择" @change=&quo
-
使用Vue.js实现数据的双向绑定
目录 如何用Vue.js实现数据的双向绑定? 1. 理解双向绑定 2. 使用v-model指令 3. 使用自定义组件实现双向绑定 4. 数据劫持 5. 模板引擎 6.Object.defineProperty()详解 如何用Vue.js实现数据的双向绑定? 在Vue.js中,双向数据绑定是一项非常强大的功能,它能够使数据和视图之间保持同步,让开发者更加方便地操作数据.在本文中,我们将介绍如何用Vue.js实现数据的双向绑定. 1. 理解双向绑定 首先,我们需要了解双向绑定的原理.在Vue.js中
-
详解Vue源码学习之双向绑定
原理 当你把一个普通的 JavaScript 对象传给 Vue 实例的 data 选项,Vue 将遍历此对象所有的属性,并使用 Object.defineProperty 把这些属性全部转为 getter/setter.Object.defineProperty 是 ES5 中一个无法 shim 的特性,这也就是为什么 Vue 不支持 IE8 以及更低版本浏览器. 上面那段话是Vue官方文档中截取的,可以看到是使用Object.defineProperty实现对数据改变的监听.Vue主要使用了观
-
Vue 组件上的v-model双向绑定原理解析
目录 组件上的v-model原理 v-model编译阶段 组件生成阶段 之前我们分析了Vue中v-model指令在普通表单元素上的使用原理(点击这里跳转),这一节我们继续分析v-model指令在组件上的原理. 组件上的v-model原理 v-model指令在组件上的编译过程的parse阶段与在表单元素上一样(可以参考),与普通表单元素不同之处在于genCode的阶段,在执行model函数生成代码的时候,会执行genComponentModel函数: v-model编译阶段 export defa
-
VUE JS 使用组件实现双向绑定的示例代码
1.VUE 前端简单介绍 VUE JS是一个简洁的双向数据绑定框架,他的性能超过ANGULARJS,原因是实现的机制和ANGULARJS 不同,他在初始化时对数据增加了get和set方法,在数据set时,在数据属性上添加监控,这样数据发生改变时,就会触发他上面的watcher,而ANGULARJS 是使用脏数据检查来实现的. 另外VUEJS 入门比ANGULARJS 简单,中文文档也很齐全. 2.组件实现 在使用vue开发过程中,我们会需要扩展一些组件,在表单中使用,比如一个用户选择器. 在VU
-
VUE v-model表单数据双向绑定完整示例
本文实例讲述了VUE v-model表单数据双向绑定.分享给大家供大家参考,具体如下: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>Vue v-model双向绑定</title> <script src="https://cdn.bootcss.com/vue/2.2.2/vue.min.js"></s
-
解决Vue.js 2.0 有时双向绑定img src属性失败的问题
错误用法: <img src="http:0.0.0.127/{{item.imgname}}" alt=""> 正确用法: <img src="'http:0.0.0.127/'+item.imgname" alt=""> 绑定属性的时候,前面加: 属性的值可以用表达式,但注意字符串拼接的时候要加引号 以上这篇解决Vue.js 2.0 有时双向绑定img src属性失败的问题就是小编分享给大家的全部内
随机推荐
- 在线FLV播放器实现方法
- sql2008启动代理未将对象应用到实例解决方案
- 关于多对多关系表无法更新与插入的问题
- JavaScript中的作用域链和闭包
- Bootstrap基本样式学习笔记之按钮(4)
- ASP.NET实现进度条效果
- Repeater全选删除和分页实现思路及代码
- PHP使用strstr()函数获取指定字符串后所有字符的方法
- Yii2搭建后台并实现rbac权限控制完整实例教程
- Linux下安装PHP MSSQL扩展教程
- JS+CSS实现可拖动的弹出提示框
- PHP7安装Redis扩展教程【Linux与Windows平台】
- 判断数组的最佳方法(推荐)
- 巧用Python装饰器 免去调用父类构造函数的麻烦
- SQL进行排序、分组、统计的10个新技巧分享
- 一个可以增加和删除行的table并可编辑表格中内容
- 用jQuery获取IE9下拉框默认值问题探讨
- 微信小程序 wx.uploadFile在安卓手机上面the same task is working问题解决
- C#使用FileSystemWatcher控件实现的文件监控功能示例
- PHP会话操作之cookie用法分析