初始化vue中data中的数据

news/2024/12/22 0:00:00/

当组件的根元素使用了v-if的时候, 并不会初始化data中的数据 如果想完全销毁该组件并且初始化数据,需要在使用该组件的本身添加v-if 或者是手动初始化该组件中的数据

初始化化数据的一些方法

Object.assign(this.$data, this.$options.data())
this.$data:当前的data数据(修改过后的);
this.$options.data():初始化的data数据;
Object.assign的作用就是把this.$options.data()的值赋值给this.$data;
// 表单初始化
this.form = this.$options.data().form
//  vue在创建页面是会把data数据绑定到option属性里,恢复只需要调用就可以了

下面详细说说Object.assign的用法:

ES6的官方文档的解释是:Object.assign() 方法用于将所有可枚举属性的值从一个或多个源对象复制到目标对象。它将返回目标对象
方法一:
this.数据名 = this.$options.data().数据名;//重置某一个指定的数据

方法二:
this. d a t a = t h i s . data = this. data=this.options.data(); //初始化data里面的所有数据
方法三:
Object.assign(this. d a t a , t h i s . data, this. data,this.options.data()) //获取data源对象,覆盖当前data对象状态

在这里插入图片描述

以下是一个简单的例子

未销毁数据的 直接在根元素上使用v-if 只是销毁了el-dialog组件及其中的数据 并没有销毁当前组件的数据

父组件

<template><div><el-button @click="handleOpen">显示</el-button><el-button @click="handleCls">隐藏</el-button><Children ref="children" /></div>
</template><script>
import Children from './children.vue'
export default {name: 'Father',components: {Children},props: {},data() {return {}},methods: {handleOpen() {this.$refs.children.dialogFormVisible = trueself.console.log(this.$refs.children.dialogFormVisible)},handleCls() {this.$refs.children.dialogFormVisible = false}}}
</script><style lang="scss" scoped></style>

子组件

<template><el-dialog v-if="dialogFormVisible" title="收货地址" :visible.sync="dialogFormVisible"><el-form :model="form"><el-form-item label="活动名称" :label-width="formLabelWidth"><el-input v-model="form.name" autocomplete="off" /></el-form-item><el-form-item label="活动区域" :label-width="formLabelWidth"><el-select v-model="form.region" placeholder="请选择活动区域"><el-option label="区域一" value="shanghai" /><el-option label="区域二" value="beijing" /></el-select></el-form-item></el-form><div slot="footer" class="dialog-footer"><el-button @click="dialogFormVisible = false">取 消</el-button></div></el-dialog>
</template><script>
export default {components: {},data() {return {dialogFormVisible: false,form: {name: '',region: '',date1: '',date2: '',delivery: false,type: [],resource: '',desc: ''},formLabelWidth: '120px'}}
}
</script><style lang="scss" scoped></style>

显示效果

第一次填写数据
在这里插入图片描述
第二次打开
在这里插入图片描述

销毁数据的

父组件

<template><div><el-button @click="handleOpen">显示</el-button><el-button @click="handleCls">隐藏</el-button><Children v-if="dialogShow" ref="children" @handleClose="handleClose" /></div>
</template><script>
import Children from './children.vue'
export default {name: 'Father',components: {Children},props: {},data() {return {dialogShow: false}},methods: {handleOpen() {// this.$refs.children.dialogFormVisible = truethis.dialogShow = true// self.console.log(this.$refs.children.dialogFormVisible)},handleCls() {this.dialogShow = false// this.$refs.children.dialogFormVisible = false},handleClose() {this.dialogShow = false}}}
</script><style lang="scss" scoped></style>

子组件

<template><el-dialog title="收货地址" :visible="true"><el-form :model="form"><el-form-item label="活动名称" :label-width="formLabelWidth"><el-input v-model="form.name" autocomplete="off" /></el-form-item><el-form-item label="活动区域" :label-width="formLabelWidth"><el-select v-model="form.region" placeholder="请选择活动区域"><el-option label="区域一" value="shanghai" /><el-option label="区域二" value="beijing" /></el-select></el-form-item></el-form><div slot="footer" class="dialog-footer"><el-button @click="handleClose">取 消</el-button></div></el-dialog>
</template><script>
export default {components: {},data() {return {dialogFormVisible: false,form: {name: '',region: '',date1: '',date2: '',delivery: false,type: [],resource: '',desc: ''},formLabelWidth: '120px'}},methods: {handleClose() {this.$emit('handleClose')}}
}
</script><style lang="scss" scoped></style>

显示效果

第一次填写
在这里插入图片描述
第二次打开数据已经清空了
在这里插入图片描述


http://www.ppmy.cn/news/69887.html

相关文章

约翰霍普金斯大学诺奖得主涉嫌造假,撤回5篇PNAS论文

2019年&#xff0c;约翰霍普金斯大学的著名基因医学科学家Gregg L. Semenza博士因为“发现细胞如何感知和适应氧气供应”&#xff0c;和另外两名科学家&#xff08; William Kaelin Jr. and Peter J. Ratcliffe&#xff09;分享当年的生理医学诺贝尔奖。 近期&#xff0c;Gregg…

unittest自动化测试框架讲解以及实战

为什么要学习unittest 按照测试阶段来划分&#xff0c;可以将测试分为单元测试、集成测试、系统测试和验收测试。单元测试是指对软件中的最小可测试单元在与程序其他部分相隔离的情况下进行检查和验证的工作&#xff0c;通常指函数或者类&#xff0c;一般是开发完成的。 单元…

指令流和数据流

指令流和数据流 Flynn于1972年提出计算平台分类法主要根据指令流和数据流来分类&#xff0c;分为四类&#xff1a; ①单指令流单数据流机器&#xff08;S1SD) SISD机器是一种传统的串行计算机&#xff0c;它的硬件不支持任何形式的并行计算&#xff0c;所有的指令都是串行执…

Dubbo——微服务框架(单体式->分布式->微服务)

是什么&#xff1f; Dubbo是阿里巴巴开源的基于Java的高性能RPC&#xff08;一种远程调用&#xff09;分布式服务框架&#xff0c;致力于提供高性能和透明化的RPC远程服务调用方案&#xff0c;以及SOA服务治理方案&#xff0c;它提供了三大核心能力&#xff1a;面向接口的远程…

人工智能之配置环境教程二:在Anaconda中创建虚拟环境并在VsCode中使用

人工智能之配置环境教程二&#xff1a;在Anaconda中创建虚拟环境安装pytorch并在VsCode中使用虚拟环境 作者介绍一. 在Anaconda中创建虚拟环境1. 进入本地终端1.1 键盘使用**winR**快捷键1.2 输入**cmd**点击**确定**进入windows命令行终端 2. 安装镜像源2.1 添加镜像源 3. 创建…

python爬虫之正则详解

正则表达式是一种使用单个字符串来描述、匹配和定位文本中某个特定模式的工具。在 Python 编程语言中&#xff0c;正则表达式可以用来处理各种文本数据、数据采集和处理、爬虫和搜索等方面。在本文中&#xff0c;我们将学习如何在 Python 爬虫中使用正则表达式&#xff0c;包括…

【前端面经】JS-异步解决方案

同步和异步 众所周知, JavaScript是一门单线程的语言, 单线程就意味着同一时间只能执行一个任务, 当前任务执行结束, 才会执行下一个任务. 这种模式的好处就是执行环境比较单纯, 但坏处也很明显, 一旦有某个任务卡住了, 就会导致整个程序阻塞. 为了解决这个问题, JS将任务的执…

【Java】基础知识点总结

Java学习记录---已完成 Java基础第一部分&#xff1a;变量、操作符、控制流程、数据结构第二部分&#xff1a;类和对象第三部分&#xff1a;接口与继承第四部分&#xff1a;数字与字符串第五部分&#xff1a;日期 学习地址: HOW2J.CN Java基础 第一部分&#xff1a;变量、操作…