v-model里使用过滤器

点击查看filter文档

文档所述过滤器只能用在v-bind指令和{{}}表达式中,v-model中使用过滤器是一种思维误区。
因为v-model里实现数据显示和存储格式的转换应该是双向的。如下例:
  computed: {
    sex: {
      get: function () {
        return this.info.sex === 1 ? '男' : this.info.sex === 0 ? '女' : '未知'
      set: function (value) {
        this.info.sex = value === '男' ? 1 : 0
      }
    }
  },

这里的过滤应该是双向的:
1.数据显示时性别由数字转为文字
2.数据存储时性别由文字转为数字

在 Vue.js 中,`v-model` 实现的是双向绑定功能。然而,在 Vue 2.x 版本中可以通过自定义过滤器来修改输入值并同步更新到模型上[^1]。需要注意的是,Vue 官方并不推荐直接在 `v-model` 的绑定过程中使用过滤器,因为这可能会导致逻辑复杂化以及难以维护的代码结构。 以下是通过自定义方法而非内置过滤器的方式实现类似效果的一个例子: ### 自定义过滤器模拟 #### 场景描述 假设我们希望用户输入的内容自动转换为大写字母形式显示,并且保持双向绑定的功能。 ```html <div id="app"> <input type="text" v-model="filteredMessage"> <p>Filtered Message: {{ filteredMessage }}</p> </div> <script> var app = new Vue({ el: '#app', data: { rawMessage: '' }, computed: { filteredMessage: { get() { return this.rawMessage.toUpperCase(); // 将原始消息转为大写展示 }, set(newValue) { this.rawMessage = newValue.toLowerCase(); // 输入时强制转换为小写存储 } } } }); </script> ``` 在这个示例中,`computed` 属性被用来创建了一个带有 getter 和 setter 方法的计算属性 `filteredMessage`。当用户更改输入框中的内容时,setter 方法会捕获新的值并将其转化为小写保存;而 getter 则负责将存储的小写字符串转换成大写供页面显示[^5]。 对于 Vue 3 用户来说,可以利用组合式 API (`Composition API`) 来达到同样的目的: ```javascript import { ref, computed } from 'vue'; export default { setup() { const rawMessage = ref(''); const filteredMessage = computed({ get: () => rawMessage.value.toUpperCase(), set: (newValue) => { rawMessage.value = newValue.toLowerCase(); } }); return { filteredMessage }; } }; ``` 以上代码展示了如何在现代 JavaScript 应用程序框架 Vue.js 下操作数据流,确保界面与底层状态之间的一致性和灵活性的同时也提供了简单的文本变换能力[^4]。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值