vue 里如何获取 data 中数据的初始状态?

简介: vue 里如何获取 data 中数据的初始状态?

问题

当我们需要 data 的初始状态时,应该怎么获取?



解决

可以使用 $options 获取

vue 官方文档:vm.$options


20210607110255256.png


使用方法

代码:

<template>
  <div>
    <h2>options 测试页面</h2>
    <hr>
    name的初始值:{{initName}}
    <hr>
    mounted修改后name的值:{{name}}
    <hr>
    <button @click="handleClick">获取data里name的初始值</button>
  </div>
</template>
<script>
export default {
  data () {
    return {
      name: '凯小默',
      initName: ''
    };
  },
  mounted() {
    this.name = 'kaimo';
    console.log('mounted-->', this.name);
  },
  methods: {
    handleClick() {
    }
  },
};
</script>



当前的效果如下:

20210607150627190.png

接下来,我们实现name的初始值获取:

先看一下 $options 到底是什么样的

handleClick() {
  console.log(this.$options);
}


20210607152446157.png


获取对比:

handleClick() {
  console.log('$data:data', this.$data);
  console.log('$options:data', this.$options.data.call(this));
}

20210607153254180.png


完整代码:

<template>
  <div>
    <h2>options 测试页面</h2>
    <hr>
    name的初始值:{{initName}}
    <hr>
    mounted修改后name的值:{{name}}
    <hr>
    <button @click="handleClick">获取data里name的初始值</button>
  </div>
</template>
<script>
export default {
  data () {
    return {
      name: '凯小默',
      initName: ''
    };
  },
  mounted() {
    this.name = 'kaimo';
    console.log('mounted-->', this.name);
  },
  methods: {
    handleClick() {
      console.log('$data:data', this.$data);
      console.log('$options:data', this.$options.data.call(this));
      this.initName = this.$options.data.call(this).name;
    }
  },
};
</script>


20210607154013899.png


注意:在使用 $options.data 时 用 call 调用并传入当前的 this,不然默认的 this 可能会指向全局的 vue 对象,造成报错。




目录
相关文章
|
3天前
|
监控 JavaScript 前端开发
使用Vue.js开发员工上网行为监控的实时数据展示页面
使用Vue.js开发的实时员工上网行为监控页面,展示员工访问的网站、应用和时间等数据。页面响应式设计,适应不同设备。通过Vue组件显示实时数据,如`&lt;li v-for=&quot;activity in activities&quot;&gt;`循环渲染。数据定时更新,利用Vue的生命周期钩子和axios从服务器获取并自动刷新,确保数据的时效性。该页面有助于管理者即时了解员工网络活动,保障企业网络安全和资源管理。
23 5
|
17小时前
|
JavaScript 前端开发 测试技术
使用 Vue CLI 脚手架生成 Vue 项目
通过 Vue CLI 创建 Vue 项目可以极大地提高开发效率。它不仅提供了一整套标准化的项目结构,还集成了常用的开发工具和配置,使得开发者可以专注于业务逻辑的实现,而不需要花费大量时间在项目配置上。
53 7
使用 Vue CLI 脚手架生成 Vue 项目
|
2天前
|
JavaScript 算法
“Error: error:0308010C:digital envelope routines::unsupported”启动vue项目遇到一个错误【已解决
“Error: error:0308010C:digital envelope routines::unsupported”启动vue项目遇到一个错误【已解决
8 1
|
2天前
|
JavaScript
error Component name “Login“ should always be multi-word vue/multi-word-component-names【已解决】
error Component name “Login“ should always be multi-word vue/multi-word-component-names【已解决】
6 1
|
2天前
|
JavaScript
vue知识点
vue知识点
10 3
|
1月前
|
JavaScript API
【vue实战项目】通用管理系统:api封装、404页
【vue实战项目】通用管理系统:api封装、404页
43 3
|
1月前
|
人工智能 JavaScript 前端开发
毕设项目-基于Springboot和Vue实现蛋糕商城系统(三)
毕设项目-基于Springboot和Vue实现蛋糕商城系统
|
1月前
|
JavaScript Java 关系型数据库
毕设项目-基于Springboot和Vue实现蛋糕商城系统(一)
毕设项目-基于Springboot和Vue实现蛋糕商城系统
|
1月前
|
JavaScript 前端开发
报错:关于Vue项目下载swiper插件时没有dist文件夹的问题
报错:关于Vue项目下载swiper插件时没有dist文件夹的问题
|
1月前
|
前端开发 JavaScript 测试技术
Vue3+Vite+TypeScript常用项目模块详解(下)
现在无论gitee还是github,越来越多的前端开源项目采用Vue3+Vite+TypeScript+Pinia+Elementplus+axios+Sass(css预编译语言等),其中还有各种项目配置比如eslint 校验代码工具配置等等,而我们想要进行前端项目的二次开发,就必须了解会使用这些东西,所以作者写了这篇文章进行简单的介绍。