<textarea name="" id="" cols="30" rows="10" v-model="$store.state.user.giftMessage | truncate 150"></textarea>
我尝试创建一个自定义过滤器:
filters: {
truncate(text, stop, clamp) {
return text.slice(0, stop) + (stop < text.length ? clamp || '...' : '')
}
}
但是当我把它放在 v-model 上作为输入时,这并没有破坏构建……
有什么建议吗?
原文由 J W 发布,翻译遵循 CC BY-SA 4.0 许可协议
这是您真正想要使用组件的情况之一。
这是 一个示例组件,它呈现
textarea
并限制文本数量。请注意:这不是生产就绪的,请处理所有角落案例组件。它旨在作为示例。
该组件实现
v-model
并且仅在文本长度小于指定的最大值时才对数据发出更改。它通过侦听keydown
并在文本长度等于或大于允许的最大值时阻止默认操作(键入字符)来做到这一点。问题中代码的另一个问题是 Vuex 不允许您直接设置状态值;你必须通过突变来做到这一点。也就是说,应该有一个接受新值并设置它的 Vuex 突变,并且代码应该提交突变。
在你的 Vue 中:
从技术上讲,代码应该使用
getter
来获取用户(它是giftMessage),但这应该可以。在您将使用的模板中:这是一个使用 Vuex 的完整示例。