dataV组件使用——数据更新更新组件

bug 当数据更新只更新一个属性页面不会刷新(this.config1.data = arr;)

必须重新赋值整个config

方式一:检测到数据更新重新赋值config

js 复制代码
 this.config1 = {
      data: arr,
      header: ["所在单位", "人员姓名", "职位", "联系方式", "人员状态"],
      align: ["center", "center", "center", "center", "center"],
      columnWidth: [150],
      rowNum: 7,
      evenRowBGC: "rgba(33, 78, 133,.5)",
      oddRowBGC: "transparent",
      headerBGC: "",
      waitTime: 1000,
      headerHeight: "45",
 };

方式二:同理使用es6语法

js 复制代码
this.config1.data = arr;
this.config1={...this.config1}
js 复制代码
<template>
  <dv-scroll-board
    :config="
      type == 1 ? config1 : type == 2 ? config2 : type == 3 ? config3 : config4
    "
    ref="scrollBoard"
    class="w100 h100"
  />
</template>
<script>
export default {
  props: ["list", "type"],
  watch: {
    list: {
      handler(val) {
        // console.log("watch监听", val, this.type, 777777);
        if (val) {
          if (this.type == 1) {
            let arr = val.map((el) => {
              return [
                el.deptName,
                el.personName,
                el.postName,
                el.phoneNumber,
                `<span class="${
                  el.memberTypeName == "在岗"
                    ? "green1"
                    : el.memberTypeName == "培训" || el.memberTypeName == "出差"
                    ? "red1"
                    : el.memberTypeName == "休假" || el.memberTypeName == "轮休"
                    ? "yellow1"
                    : "blue1"
                }">${el.memberTypeName}</span>`,
              ];
            });
            // ☆☆☆☆☆ bug 当数据更新只更新一个属性页面不会刷新(this.config1.data = arr;)
            // 必须重新赋值整个config
            /**
             * 方式一 :
             * this.config1.data = arr;
             * this.config1={...this.config1}
             */
            /**
             * 方式二 : 如下重新写一遍
             */
            /**
             * 方式三: 直接在html中绑定对象就会监听到
             */
            this.config1 = {
              data: arr,
              header: ["所在单位", "人员姓名", "职位", "联系方式", "人员状态"],
              align: ["center", "center", "center", "center", "center"],
              columnWidth: [150],
              rowNum: 7,
              evenRowBGC: "rgba(33, 78, 133,.5)",
              oddRowBGC: "transparent",
              headerBGC: "",
              waitTime: 1000,
              headerHeight: "45",
            };
            // console.log("config1", arr, this.config1);
            // this.$refs["scrollBoard"].updateRows(arr, 0);
          } else if (this.type == 2) {
            let arr = val.map((el) => {
              return [
                el.deptName,
                el.carName,
                el.carTypeName,
                el.carNumber,
                `<span class="${
                  el.carStatusName == "正常"
                    ? "green1"
                    : el.carStatusName == "维修"
                    ? "red1"
                    : "blue1"
                }">${el.carStatusName}</span>`,
              ];
            });
            // this.config2.data = arr;
            this.config2 = {
              data: arr,
              header: [
                "所在单位",
                "车辆名称",
                "车辆属性",
                "车牌号",
                "车辆状态",
              ],
              align: ["center", "center", "center", "center", "center"],
              columnWidth: [150],
              rowNum: 7,
              evenRowBGC: "rgba(33, 78, 133,.5)",
              oddRowBGC: "transparent",
              headerBGC: "",
              waitTime: 1000,
              headerHeight: "45",
            };
            // console.log("config2", arr, this.config2);
            // this.$refs["scrollBoard"].updateRows(arr, 0);
          } else if (this.type == 3) {
            let arr = val.map((el) => {
              return [
                el.dutyTypeName,
                el.userName,
                el.workPhoneNumber,
                el.mobilePhoneNumber,
                el.virtualNumber,
              ];
            });
            // this.config2.data = arr;
            this.config3 = {
              data: arr,
              header: ["值班类型", "姓名", "工作电话", "联系电话", "虚拟号"],
              align: ["center", "center", "center", "center", "center"],
              columnWidth: [100, , , ,],
              rowNum: 4,
              evenRowBGC: "rgba(33, 78, 133,.5)",
              oddRowBGC: "transparent",
              headerBGC: "",
              waitTime: 1000,
              headerHeight: "35",
            };
            // console.log("config3", arr, this.config3);
            // this.$refs["scrollBoard"].updateRows(arr, 0);
          } else if (this.type == 4) {
            let arr = val.map((el) => {
              return [el.dutyDeptName, el.userName, el.mobilePhoneNumber];
            });
            // this.config2.data = arr;
            this.config4 = {
              data: arr,
              header: ["值班类型", "值班人员", "联系电话"],
              align: ["center", "center", "center"],
              columnWidth: [150, 150, ,],
              rowNum: 7,
              evenRowBGC: "rgba(33, 78, 133,.5)",
              oddRowBGC: "transparent",
              headerBGC: "",
              waitTime: 3000,
              headerHeight: "45",
            };
            // console.log("config3", arr, this.config3);
            // this.$refs["scrollBoard"].updateRows(arr, 0);
          }
        }
      },
      // 这里是关键,代表递归监听的变化
      deep: true,
      // immediate: true,
    },
  },
  data() {
    return {
      config1: {
        header: ["所在单位", "人员姓名", "职位", "联系方式", "人员状态"],
        data: [],
        align: ["center", "center", "center", "center", "center"],
        columnWidth: [150],
        rowNum: 7,
        evenRowBGC: "rgba(33, 78, 133,.5)",
        oddRowBGC: "transparent",
        headerBGC: "",
        waitTime: 1000,
        headerHeight: "45",
      },
      config2: {
        header: ["所在单位", "车辆名称", "车辆属性", "车牌号", "车辆状态"],
        data: [],
        align: ["center", "center", "center", "center", "center"],
        columnWidth: [150],
        rowNum: 7,
        evenRowBGC: "rgba(33, 78, 133,.5)",
        oddRowBGC: "transparent",
        headerBGC: "",
        waitTime: 1000,
        headerHeight: "45",
      },
      config3: {
        header: ["值班类型", "姓名", "工作电话", "联系电话", "虚拟号"],
        data: [],
        align: ["center", "center", "center", "center", "center"],
        // columnWidth: [150],
        rowNum: 4,
        evenRowBGC: "rgba(33, 78, 133,.5)",
        oddRowBGC: "transparent",
        headerBGC: "",
        waitTime: 1000,
        headerHeight: "35",
      },
      config4: {
        header: ["值班类型", "值班人员", "联系电话"],
        data: [],
        align: ["center", "center", "center"],
        // columnWidth: [150],
        rowNum: 7,
        evenRowBGC: "rgba(33, 78, 133,.5)",
        oddRowBGC: "transparent",
        headerBGC: "",
        waitTime: 1000,
        headerHeight: "35",
      },
    };
  },

  mounted() {},
  // 销毁定时器
  beforeDestroy() {},

  methods: {},
};
</script>
<style lang="scss" scoped>
@import "../components/css/rem.scss";

::v-deep.dv-scroll-board .header .header-item {
  // color: #f39800;
  // color: cyan;
  color: #6fddc2;
  font-weight: 700;
}

::v-deep.dv-scroll-board.solo .rows {
  border: 1px solid rgba(0, 238, 255, 0.123);
}

::v-deep.dv-scroll-board .green1,
::v-deep.dv-scroll-board .red1,
::v-deep.dv-scroll-board .yellow1,
::v-deep.dv-scroll-board .blue1 {
  padding: 4px 10px;
  border-radius: 4px;
  font-size: 12px;
}

::v-deep.dv-scroll-board .green1 {
  border: 1px solid cyan;
  background: rgba(0, 255, 255, 0.2);
}

::v-deep.dv-scroll-board .red1 {
  border: 1px solid rgb(250, 13, 84);
  background: rgba(250, 13, 84, 0.2);
}

::v-deep.dv-scroll-board .blue1 {
  border: 1px solid rgb(0, 89, 255);
  background: rgba(0, 89, 255, 0.2);
}

::v-deep.dv-scroll-board .yellow1 {
  border: 1px solid rgb(250, 213, 2);
  background: rgba(250, 213, 2, 0.2);
}
</style>

方法三:直接在html中绑定对象,数据变化会自动更新页面

js 复制代码
 <dv-water-level-pond style="width: 0.65rem; height: 0.65rem"
   :config="{
      data: [res.currentLevel],
      waveNum: 1,
      waveHeight: 10,
      waveOpacity: 0.5,
      shape: 'round',
      colors: ['#fff', '#ff3300']
  }" 
/>
相关推荐
桂月二二4 小时前
探索前端开发中的 Web Vitals —— 提升用户体验的关键技术
前端·ux
hunter2062065 小时前
ubuntu向一个pc主机通过web发送数据,pc端通过工具直接查看收到的数据
linux·前端·ubuntu
qzhqbb5 小时前
web服务器 网站部署的架构
服务器·前端·架构
刻刻帝的海角6 小时前
CSS 颜色
前端·css
九酒6 小时前
从UI稿到代码优化,看Trae AI 编辑器如何帮助开发者提效
前端·trae
浪浪山小白兔7 小时前
HTML5 新表单属性详解
前端·html·html5
lee5767 小时前
npm run dev 时直接打开Chrome浏览器
前端·chrome·npm
2401_897579657 小时前
AI赋能Flutter开发:ScriptEcho助你高效构建跨端应用
前端·人工智能·flutter
limit for me8 小时前
react上增加错误边界 当存在错误时 不会显示白屏
前端·react.js·前端框架
浏览器爱好者8 小时前
如何构建一个简单的React应用?
前端·react.js·前端框架