首页 > 其他分享 >js 传参到 vue + 计算属性使用

js 传参到 vue + 计算属性使用

时间:2023-12-11 22:24:32浏览次数:28  
标签:vue xAxisData yAxisData js nodeData 传参到 let data queryEchartsData

场景

  • js 中存储 xAxisData = [......]yAxisData = [......],想在 vue 中使用,但要求使用前转化成 data 存有若干个 (x, y) 的形式
  • 在改变 xAxisData yAxisData 的任意一值时,都会反馈更新到 vue 的每一个调用了 data 的地方

方法一:js 中

Cannot read properties of undefined (reading 'xAxisData')

  • 错误的编写:

    // 定义方法
    function queryEchartsData(xAxisData, yAxisData) {
        let data = [];
        for(let i= 0; i < xAxisData.length; i++){
            let nodeData = [];
            nodeData.push(xAxisData[i]);
            nodeData.push(yAxisData[i]);
            data.push(nodeData);
        }
        return data;
    }
    
    export const schema = {
    	xAxisData:[......],
        yAxisData:[......],
        // 以下的写法是错误的
        data:queryEchartsData(this.xAxisData, this.yAxisData),
    }
    
    • 报错:Cannot read properties of undefined (reading 'xAxisData')
    • this 在 data:queryEchartsData(this.xAxisData, this.yAxisData) 这一行实际上是指向外层的上下文,而不是紧跟着的 schema 里的 xAxisData

改写优化:

// 定义方法
function queryEchartsData(xAxisData, yAxisData) {
    let data = [];
    for(let i= 0; i < xAxisData.length; i++){
        let nodeData = [];
        nodeData.push(xAxisData[i]);
        nodeData.push(yAxisData[i]);
        data.push(nodeData);
    }
    return data;
}
const xAxisData = [......];
const yAxisData = [......];

export const schema = {
	xAxisData:xAxisData,
    yAxisData:yAxisData,
    data: queryEchartsData(xAxisData, yAxisData)
}

方法二:vue 中

功能不符合要求

  • js 只传 xAxisData = [......]yAxisData = [......] 转为 data 形式由 vue 来做

  • 错误的编写:

    <script lang="js">
        export default {
            watch(){
                xAxisData: {
                    deep:true,
                    immediate:true,
                    handler(val){
                    	this.refreshEcharts(); // nextTick(() => {	this.init();	})
                    }
                },
                yAxisData: {
                    deep:true,
                    immediate:true,
                    handler(val){
                        this.refreshEcharts();
                    }
                },
            }
            data() {
                const data = this.queryEchartsData()
                return {
                    data
                };
            },
            methods: {
                queryEchartsData() {
                    this.test
                    let data = [];
                    for(let i= 0; i < this.xAxisData.length; i++){
                        let nodeData = [];
                        nodeData.push(this.xAxisData[i]);
                        nodeData.push(this.yAxisData[i]);
                        data.push(nodeData);
                    }
                    return data;
                },
                init() {
                    // ......
                    data: this.data,
                    xxx: this.data[0],
                    yyy: this.data.length,
                    // ......
                }
            }
    </script>
    
    • deep: true 表示深度监听,即在对象内部的属性发生变化时也触发回调
    • immediate: true 表示在初始时就执行一次 handler,即在组件创建之初就会执行一次
    • handler(val) 是回调函数,当 xAxisDatayAxisData 发生变化时,这个函数会被调用
      • 这里就是进行了图形的重新渲染
    • 注意,这里只是完成了第一次的渲染,之后的 data 不会跟着更新变化

利用计算属性

  • 利用计算属性结合了:获取 data 方法和监听

      computed: {
        queryEchartsData() {
          let data = [];
          for(let i= 0; i < this.xAxisData.length; i++){
            let nodeData = [];
            nodeData.push(this.xAxisData[i]);
            nodeData.push(this.yAxisData[i]);
            data.push(nodeData);
          }
          return data;
        }
      },
    
    • 这样的话,使用时:

      data: this.queryEchartsData,
      this.queryEchartsData[0],
      this.queryEchartsData.length,
      
    • 即可

  • 这时的 this.queryEchartsData 就已经是更新后的 data 了

  • 计算属性会在其依赖的数据发生变化时自动重新计算

    • 会自动处理依赖关系,无需手动设置 watch

标签:vue,xAxisData,yAxisData,js,nodeData,传参到,let,data,queryEchartsData
From: https://www.cnblogs.com/zhu-ya-zhu/p/17895722.html

相关文章

  • JSON .NET SERIALIZE exploitation
    exploitingjsonserializationin.NETcore当使用特定的配置的时候,将在NewtonSoftJSON中会有json的反序列化漏洞。更加具体化一些就是当jsonserializationsettings中的typenamehandling这个属性不是None的时候。因为默认来说typenamehandling是设置成none的。当配置文......
  • vitest&@vue/test-utils组件单元测试
    依赖"vitest":"0.34.6","@vue/test-utils":"2.4.3","axios-mock-adapter":"^1.22.0",示例import{mount}from"@vue/test-utils";import{test,vi}from"vitest";import{gl......
  • 记录--前端中 JS 发起的请求可以暂停吗
    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助在前端中,JavaScript(JS)可以使用XMLHttpRequest对象或fetchAPI来发起网络请求。然而,JavaScript本身并没有提供直接的方法来暂停请求的执行。一旦请求被发送,它会继续执行并等待响应。尽管如此,你可以通过一些技巧或......
  • 介绍 Vue3 的常见目录结构
    当着手使用Vue3开发项目时,理解其目录结构至关重要。Vue3的文件组织和模块分隔方式直接关系到项目的可维护性和扩展性。本文将深入探讨Vue3的标准目录结构,并提供一些实用的指南和推荐做法。在Vue3项目中,通常会有以下一些常见的目录和文件:src目录:src 目录是Vue3项目的......
  • 介绍 Vue3 的常见目录结构
    当着手使用Vue3开发项目时,理解其目录结构至关重要。Vue3的文件组织和模块分隔方式直接关系到项目的可维护性和扩展性。本文将深入探讨Vue3的标准目录结构,并提供一些实用的指南和推荐做法。在Vue3项目中,通常会有以下一些常见的目录和文件:src目录:src 目录是Vue3项目的......
  • SpringBoot+Vue实现大文件分块上传
    1.项目背景由于用户需求,需要上传大量图片,只能通过上传压缩包的形式上传,可是压缩包过大时,又会出现上传超时的情况,故需要将压缩包分块上传,然后解压缩图片、若图片过大则再对图片进行压缩。2.分块上传分块上传我在用的时候发现有两种:第一种:分块合并接口全由后端接口生成;第二种:前端......
  • 介绍 Vue3 的常见目录结构
    当着手使用Vue3开发项目时,理解其目录结构至关重要。Vue3的文件组织和模块分隔方式直接关系到项目的可维护性和扩展性。本文将深入探讨Vue3的标准目录结构,并提供一些实用的指南和推荐做法。 在Vue3项目中,通常会有以下一些常见的目录和文件:src目录:src 目录是Vu......
  • 介绍 Vue3 的常见目录结构
    当着手使用Vue3开发项目时,理解其目录结构至关重要。Vue3的文件组织和模块分隔方式直接关系到项目的可维护性和扩展性。本文将深入探讨Vue3的标准目录结构,并提供一些实用的指南和推荐做法。 在Vue3项目中,通常会有以下一些常见的目录和文件:src目录:src 目录是Vu......
  • Vue + Element 实现按钮指定间隔时间点击
    1、业务需求需要加一个按钮,调用第三方API,按钮十分钟之内只能点击一次,刷新页面也只能点击一次2、思路加一个本地缓存的时间戳,通过时间戳计算指定时间内不能点击按钮3、实现1)vue页面<template><el-row:gutter="15"><el-col:span="4"><el-buttontype="danger"......
  • mysql存json数据时的查询办法
    很多时候mysql的一列当中存的是json格式的数据,这时候如果要查询某个key对应的值的时候要如何查询呢,这里记录一种查询方法:json列的值:{“InventoryMainTypeCode”:1,“InventoryMainTypeName”:“GOOD”}现在要查询InventoryMainTypeCode为xxx或者InventoryMainTypeName为xxx的数......