filters访问methods中的方法,methods中使用过滤器的方法

一、methods中使用过滤器的方法

1.一种方法是采用全局过滤器
设置全局的filter的方法

Vue.filter(‘name’,function (val) {})

在methods中使用全局的filter:

Vue.filters['filterName'] (val)

2.设置当前组件的方法

filter: {
  functionName (val) {
  // logic process
  }
}

在methods中使用局部的filter:

this.$options.filters['filterName'] (val)

例子:

Vue.filter('capitalize', function (value) {
  if (!value) return ''
  value = value.toString()
  return value.charAt(0).toUpperCase() + value.slice(1)
})

new Vue({
  methods:{
  	someMethod(){
  		const someValue = 'hello'
  	  	console.log(this.$options.filters['capitalize'](someValue)) // Hello 
  	}
  }
  // ...
})
二、filters访问methods中的方法

全局filters和本地filters是为了避免命名冲突和全局污染。全局filters和局部filters都无法获取this,如想获取,需要采用变通的方法,即在外面传参,在调用过滤器的地方(template模板里面),把this传进去。譬如:

<detail-item label="员工状态" :value="modelDetail.employeeStatus|employeeStatusFilter(this)"></detail-item>

这样就需要改一下过滤器的定义,譬如:

employeeStatusFilter(value, that) { // that接受传参this
      // some code
},

还有一点需要注意,通过在template html传参this,并不是Vue实例,而是Vue实例的代理对象,参见下图:
在这里插入图片描述
如果要想获得Vue实例,需要调用_self方法,即:

const _this = that._self // _this即为Vue实例

然后,我们就可以调用methods、data中的方法和属性了,即:

employeeStatusFilter(value, that) {
      const _this = that._self
      return _this.pickLabel(_this.employeeStatusOptions, value) //pickLabel为methods中的一个方法
},

参考文章:https://blog.csdn.net/fredricen/article/details/107165890

Vue ,可以使用 `filters` 过滤器对数据进行格式化,但是它不能直接用于表格筛选。要实现表格的日期筛选,需要在表格使用自定义筛选器。 在 Vue ,可以使用 `Vue.filter` 方法定义一个全局过滤器。但是在这种情况下,我们需要为每个表格定义不同的筛选器,因此最好将筛选器定义为组件的局部方法。 下面是一个示例代码,其包含一个名为 `dateFilter` 的自定义筛选器,以及一个名为 `DateTable` 的表格组件,该组件使用了 `el-date-picker` 组件来实现日期筛选: ```html <template> <div> <el-date-picker v-model="filterDate" type="date" placeholder="Select date" @change="handleFilterChange" ></el-date-picker> <el-table :data="tableData" :filters="filters"> <el-table-column prop="date" label="Date" :filters="dateFilters"></el-table-column> <el-table-column prop="name" label="Name"></el-table-column> <<!-- other columns --> </el-table> </div> </template> <script> export default { data() { return { filterDate: null, tableData: [ { name: 'John', date: '2021-01-01' }, { name: 'Mary', date: '2021-01-02' }, { name: 'Bob', date: '2021-01-03' }, <!-- more data --> ], }; }, computed: { dateFilters() { const set = new Set(); this.tableData.forEach((item) => { set.add(item.date); }); return Array.from(set).map((value) => ({ text: value, value })); }, filters() { return { date: (value, row) => { if (!this.filterDate) { return true; } return value === this.filterDate; }, }; }, }, methods: { handleFilterChange() { this.$refs.table.clearFilter(); this.$refs.table.addFilter('date', this.filterDate); }, }, }; </script> ``` 在上面的代码,我们定义了一个名为 `dateFilter` 的自定义筛选器,它将日期格式化为 `YYYY-MM-DD` 格式。然后,在表格组件,我们使用 `el-date-picker` 组件来实现日期筛选,并在表格列使用 `filters` 属性来指定筛选器选项。同时,我们使用 `filters` 属性为表格添加了一个名为 `date` 的筛选器,其过滤方法根据日期筛选表格数据。 最后,在 `handleFilterChange` 方法,我们使用 `$refs` 引用表格并清除之前的筛选器,然后将新的日期筛选器应用到表格。 这样就实现了基于日期控件的表格筛选功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值