Vue计算属性computed简介及简单用法(表格筛选)

简介:
  在vue中一些数据经常依赖于别的数据做出改变,且改变的逻辑也较复杂,这个时候就需要用到计算属性computed。通俗来说就是当前数据不是确定的,要经常做出改变,而这个改变是其他数据改变导致的。
  
基本语法:
  computed: {
     mydata:function(){
       /*函数主体*/
       return data; //需要输出的数据 此时data就等于mydata
    }
   }
  在HTML中使用{ { mydata } }来显示
 
注意:mydata不能在data中声明,否则会出错。

简单例子(表格筛选):
 目标:

  • 使用select控件选择类型 (收入/支出/全部)
  • 使用datepicker选择月份
  • 表格中显示对应数据
    在这里插入图片描述
     1.在table标签中的data属性设置要填充的数组mydata
     2.在computed中设置mydata显示逻辑
computed:{
    //从服务端接受的数据为data1 包含时间date 类型type等信息
	mydata:function(){
		var data2=[];//创建data2来判断类型,从data1中接受符合条件的项
		var data3=[];//创建data3来判断月份,从data2中接受符合条件的项
		if(this.select=='收入'||this.select=='支出'){//判断select的选项
        	for(var i=0;i<this.data1.length;i++){//循环data1数组,如果符合条件就push进data2数组
        		if(this.data1[i].type==this.select){
        			data2.push(this.data1[i]);
        		}
        	 }
         }
        else data2=this.data1;//选项为空或者全部时显示所有项
        if(this.month!=null){//如果月份不为空
        	for(var i=0;i<data2.length;i++){//判断月份
        		if((this.month).getMonth()==(data2[i].date).substr(5,2)-1){
        			data3.push(data2[i]);//同上
        		 }
        	 }
         }
        else data3=data2;//月份为空则选择全部
        return data3;//返回最终得出的数据到mydata中,再使用mydata填充表格
   }

总结:
1.与watch的比较
  一开始首先想到的是用watch来监听类型的变化,根据变化做出数组的改变,后来发现第一次筛选后的数据需要赋值给从服务端接受的数组data1,此时data1就会发生改变,再发生改变时,data1数组会越来越少。
  后来想到的办法是在created中接收到的数据赋给两个数组,其中一个用来保存完整的数据,在watch中每次开头把完整的数据赋给data1。
  这个问题解决后,又出现了新的问题,因为还要做月份的判断,如果也是用watch监听月份的变化,那么月份变化的时候类型不会变化,也就不会触发对应watch函数,这样就导致了两个筛选不能同时进行。
  !当mydata依赖于多个属性时,computed要优于watch。
2.与方法function()的比较
  methods: {
     mydata:function(){
       /*函数主体*/
       return data; //需要输出的数据 此时data就等于mydata
    }
   }
  在HTML中使用{ { mydata() } }来显示
  我们可以将同一函数定义为一个方法而不是一个计算属性。两种方式的最终结果确实是完全相同的。然而,不同的是计算属性是基于它们的依赖进行缓存的。只在相关依赖发生改变时它们才会重新求值。这就意味着只要 依赖的属性 还没有发生改变,多次访问 mydata计算属性会立即返回之前的计算结果,而不必再次执行函数。
  !计算属性可用于性能开销比较大的时候,有效的缓存可以很大程度上减少开销。

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
可以使用 Ant Design Vue 的 Table 和 Input 组件来实现输入框模糊筛选表格数据,并将筛选结果展示。具体实现步骤如下: 1. 在 Table 组件中设置 dataSource 属性为表格数据源,columns 属性为表格列的配置。 2. 在 Input 组件中设置 v-model 双向绑定输入框的值。 3. 在 Input 组件的 @input 事件中,通过筛选算法过滤出符合要求的表格数据。 4. 将筛选后的数据赋值给 dataSource,表格会重新渲染,展示筛选结果。 下面是示例代码: ```vue <template> <div> <a-input v-model="searchText" placeholder="请输入关键词"></a-input> <a-table :columns="columns" :dataSource="filteredData"></a-table> </div> </template> <script> export default { data() { return { data: [ { name: '张三', age: 18, address: '北京市' }, { name: '李四', age: 20, address: '上海市' }, { name: '王五', age: 22, address: '广州市' } ], searchText: '' } }, computed: { filteredData() { return this.data.filter(item => { const regExp = new RegExp(this.searchText, 'i') return regExp.test(item.name) || regExp.test(item.address) }) }, columns() { return [ { title: '姓名', dataIndex: 'name' }, { title: '年龄', dataIndex: 'age' }, { title: '地址', dataIndex: 'address' } ] } } } </script> ``` 在上面的示例代码中,我们定义了一个 data 数组作为表格数据源,每个数组元素表示一行数据,包含 name、age、address 三个属性。 在 Input 组件中,我们使用 v-model 双向绑定 searchText 变量,表示输入框中的值。 在 computed 中,我们定义了一个 filteredData 计算属性,表示筛选后的数据。在 filteredData 中,我们使用 filter 方法对 data 数组进行筛选筛选出 name 或 address 属性中包含 searchText 的数据。 在 columns 中,我们定义了表格列的配置。 最后,在 Table 组件中,我们使用 filteredData 作为 dataSource 属性值,表示展示筛选结果。当 searchText 变量发生变化时,filteredData 会重新计算表格会重新渲染,展示筛选结果。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值