vue.js - 如何将 Vue 包装的对象转换为普通对象
问题描述
我需要将类型对象的数据变量分配给普通变量
const myVue = new Vue({
el: '#myVue',
data: {
vars: {}, // show Form
},
methods: {
assign_vars() {
const new_vars = this.vars;
},
},
});
html
<input type="text" v-model="vars.name" >
我需要 new_vars
像这样:
new_vars: { name: 'test' }
但发生的new_vars
是拥有 Vue 创建的所有属性
解决方案
Vue 将其观察到的数据包装在一个特殊的对象中以有效地观察变化(这就是实现反应性的原因)。在大多数用例中,您不需要解包对象,但如果您这样做,这里有几个方法:
const unwrapped = JSON.parse(JSON.stringify(this.vars));
这是 Evan You在这里建议的方法。它甚至适用于深度嵌套的对象,只要类型可以与 JSON(字符串、数字、布尔值、对象和数组)相互转换。如果您的数据包含其他内容(例如日期),您将需要另一种方法。
const unwrapped = { ...this.vars }
这适用于浅层对象,即使它们包含非原始对象。
如果您有一个包含非原始值的深层嵌套对象,则需要编写一个递归解包其子对象的函数。
推荐阅读
- android - Androidx 项目无法识别使用 android.support.v7 的库类
- sql - 在一对多关系中插入命令
- javascript - JavaScript 返回未定义 - AWS Comprehend
- vue.js - Favicon 没有出现在 VueJS 中
- android - 为什么 Intent 的额外字符串变成了另一个?
- java - 在 Groovy 中发出 Java Lambda
- javascript - 不能在 VUEJS 中的异步函数之外使用关键字“等待”
- spring-boot - spring.jpa.hibernate.ddl-auto=none 问题
- r - 当第一个参数是字符时,为什么 `ave` 和 `table` 返回字符?
- c# - 对象引用未设置为 iTextSharp 中对象的实例 在 Stackify 中跟踪