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.youkuaiyun.com/fredricen/article/details/107165890

### JavaScript Filters 过滤器使用方法Vue.js 中,过滤器(Filter)是一种用于处理文本的自定义函数,可以在模板中直接使用。这些过滤器可以应用于双花括号插值和 `v-bind` 表达式,并通过管道符 (`|`) 来调用[^2]。 #### 定义全局过滤器 可以通过 `Vue.filter()` 方法注册一个全局可用的过滤器: ```javascript // 注册一个全局过滤器 Vue.filter('capitalize', function (value) { if (!value) return '' value = value.toString() return value.charAt(0).toUpperCase() + value.slice(1) }) ``` #### 组件内局部定义过滤器 也可以在一个组件选项中定义仅限该组件使用的本地过滤器: ```javascript new Vue({ // ... filters: { capitalize(value) { if (!value) return '' value = value.toString() return value.charAt(0).toUpperCase() + value.slice(1) } } }) ``` #### 使用过滤器 一旦创建好过滤器,在模板中的应用就变得非常简单直观: ```html <!-- 双大括号语法 --> <p>{{ message | capitalize }}</p> <!-- v-bind 指令 --> <span :title="message | capitalize">Hover me</span> ``` 需要注意的是,在 Vue 3 中官方已经不再推荐使用过滤器作为内置特性,而是建议开发者采用计算属性(computed properties) 或者方法(methods) 来替代原有功能[^1]。 对于更复杂的逻辑操作,则更适合放在 methods 或 computed 属性里面完成,这样不仅保持了代码的一致性和可读性,也更容易进行单元测试。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值