如何更好的使用VUE之数据处理方式

大家好!我叫戴向天

QQ群:602504799

如若有不理解的,可加QQ群进行咨询了解

在我前端工作之前,在处理数据的时候,我经常在想如何更好的处理数据,对数据的可空性更高,更好的变换。
其实这个也不是什么技术要点,只是在开发的时候,更加如意,特别在修改的是也方便。

我的思路是,基础数据是不容改变的。然后通过其它的方式来进行获取相对应的数据,或者其它的数据格式。

例如:

const arr = [
	{
		value: 1,
		name: 'a'
	},{
		value: 2,
		name: 'b'
	},{
		value: 3,
		name: 'c'
	},{
		value: 4,
		name: 'd'
	}
]

// 现在我只想获取arr里面的数字,
const arrNum = arr.map(item=>{
	return item.value
})
// [1,2,3,4]

// 我想获取value加上name的合并字符串
const arrStr = arr.map(item => {
	return item.value+ item.name
})
// ["1a", "2b", "3c", "4d"]

上面这两种其实就是最简单的方式,可以说体现的效果并不大。

现在我就假设数据里面有10种数据,并且以每4个分一组

const arrTest = new Array(10)

function getList ( data ) {
	const arr = []
	const column = 4
    const list = data
    const len = Math.ceil(list.length / column)
    for (let i = 0; i < len; i++) {
      arr.push(list.slice(i * column, i * column + column).map((item) => {
        return item
      }))
    }
    return arr
}
getList(arrTest)

结果如下:
在这里插入图片描述
现在我就来写个简单的数据列表加分页的功能,以及前端本地实时搜索功能的组件

<template>
  <div>
    <div>
      <input v-model="keyWord" />
    </div>
    <div>
      <ul>
        <li v-for="(item,key) in getList" :key="key">{
   
   {item}}</li>
      </ul>
    </div>
    <div>
      <span @click="changePage(false)">上一页</span>
      共 {
   
   {getTotal}} 页
      <span @click="changePage(true)">下一页</span>
    </div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      list: [], // 后台总数据
      pageSize: 10,
      page: 1,
      keyWord: '',
    };
  },
  methods: {
    // 改变page值
    changePage(bool) {
      if (bool) {
        this.page + 1 <= this.getTotal ? this.page++ : this.getTotal;
      } else {
        this.page > 1 ? this.page-- : 1;
      }
    },
  },
  computed: {
		 // 获取数据
    getList(arr) {
      // 返回的时候在进行分页处理
      const start = (this.page - 1) * this.pageSize;
      const end = start + this.pageSize;
      return this.getData.slice(start, end);
    },
		// 数据处理
    getData() {
      const arr = [];
      this.list.forEach((item) => {
        // 关键字搜索处理
        if (this.keyWord.toString()) {
          if (item.toString().indexOf(this.keyWord.toString()) > -1) {
            arr.push(item);
          }
        } else {
          arr.push(item);
        }
      });
      return arr;
    },
    // 获取总页数
    getTotal() {
      return Math.ceil(this.getData.length / this.pageSize);
    },
  },
  watch: {
    // 当关键字有变化的时候,page就进行初始化
    keyWord() {
      this.page = 1;
    },
  },
  // 创建总数据
  mounted() {
    const arr2 = new Array(100);
    for (let i = 0; i < arr2.length; i++) {
      this.list.push(i + 1);
    }
  },
};
</script>

在上面的代码中,我们可以看到,this.list的数据是没有进行该变的,循环出来的永远是处理后的数据。

虽然当前的list的基础数据很单一,全是数字。如果list是个复杂的数据,你也可以使用getData里面进行处理数据,还是不会对list进行做更改。

扫描二维码关注公众号,回复: 13106496 查看本文章

猜你喜欢

转载自blog.csdn.net/weixin_41088946/article/details/104792638
今日推荐