处理复杂数据

 实现点击事件将双大括号中的数据填充到表单中的部分。可以在模板中给每个显示数据的元素绑定一个点击事件,点击时触发相应的处理函数。

<template>
  <div>
    <div class="data-display" @click="copyData('compressed.is')">{{ datum.process_params.compressed.is.text }}</div>
    <div class="data-display" @click="copyData('compressed.status')">{{ datum.process_params.compressed.status.text }}</div>
    <div class="data-display" @click="copyData('compressed.text')">{{ datum.process_params.compressed.text.text }}</div>
    <div class="data-display" @click="copyData('query.query')">{{ datum.process_params.query.query.text }}</div>
    <div class="data-display" @click="copyData('query.rewrited_query')">{{ datum.process_params.query.rewrited_query.text }}</div>
    <div class="data-display" @click="copyData('textGenerate.is')">{{ datum.process_params.textGenerate.is.text }}</div>
    <div class="data-display" @click="copyData('textGenerate.status')">{{ datum.process_params.textGenerate.status.text }}</div>
    <div class="data-display" @click="copyData('textGenerate.text')">{{ datum.process_params.textGenerate.text.text }}</div>
    <div class="data-display" @click="copyData('textGenerate.type')">{{ datum.process_params.textGenerate.type.text }}</div>
    <div class="data-display">{{ datum.video_url }}</div>
  </div>
</template>

显示数据的 <div> 元素上添加了 @click 事件,并绑定了一个名为 copyData 的方法。其中,copyData 方法接收一个字符串参数,表示要复制的数据路径。

export default {
  // 省略其他代码
  methods: {
    copyData(dataPath) {
      const data = this.getDataByPath(dataPath);
      this.is = data.is.text;
      this.status = data.status.text;
      this.text = data.text.text;
      this.type = data.type.text;
    },
    // 获取指定路径下的数据
    getDataByPath(dataPath) {
      const pathList = dataPath.split('.');
      let data = this.datum.process_params;
      for (let path of pathList) {
        data = data[path];
      }
      return data;
    }
  }
}

copyData 方法中,首先通过 getDataByPath 方法获取指定路径下的数据,然后将需要的数据分别赋值给表单的对应属性。

getDataByPath 方法接收一个字符串参数 dataPath,这个参数表示要获取的数据路径。

在这个方法中,首先将路径字符串按 . 分割成一个数组,然后遍历这个数组,逐级访问对象的属性,直到获取到最终的数据。

 

定义了两个方法:copyData和getDataByPath。

copyData方法的作用是根据传入的参数dataPath,找到this.datum.process_params对象中对应的值,并将值赋给组件中的is、status、text、type属性。

getDataByPath方法则是根据传入的路径字符串dataPath,通过逐级访问对象属性的方式获取到对应的值。具体实现逻辑是将路径字符串分割成路径数组pathList,然后遍历路径数组中的每一个元素每次遍历访问当前数据对象data的对应属性,最终返回最终路径对应的数据。

这样可以让copyData方法调用getDataByPath方法获取到需要的数据,避免了在copyData方法中多次访问this.datum.process_params对象的冗余代码。

// 假设接口返回的数据为 response
    const response = {
      data: {
        datum: {
          process_params: {
            compressed: {
              is: {
                text: '是',
                value: 1
              },
              status: {
                text: '启用',
                value: 1
              },
              text: {
                text: '这是一段文本',
                value: 'some text'
              }
            },
            query: {
              query: {
                text: '这是一个查询',
                value: 'some query'
              },
              rewrited_query: {
                text: '这是一个重写后的查询',
                value: 'some rewrited query'
              }
            },
            textGenerate: {
              is: {
                text: '默认',
                value: 0
              },
              status: {
                text: '禁用',
                value: 0
              },
              text: {
                text: '这是另一段文本',
                value: 'some other text'
              },
              type: {
                text: 'B类型',
                value: 'B'
              }
            }
          }
        },
        video_url: 'https://www.example.com'
      }
    };

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值