Vue.js (v. 1.0.14) Vue Filter versus Vue Validator
Vue.js (v. 1.0.14) Vue Filter versus Vue Validator
我有一个表单,我正在尝试在某些输入上使用 Vue 的"货币"过滤器,然后使用 Vue 验证器 (https://github.com/vuejs/vue-validator) 进行验证。
.HTML
<validator name="foo">
<input id="example" type="tel" v-model="baz | currency" v-validate:bar="['required']" />...
<span> equals {{ baz }}</span>...
</validator>
JavaScript
Vue.config.warnExpressionErrors = false;
var vm = new Vue({
el: '#demo',
data: {
baz: ''
}
});
过滤和验证的字段会随着每次击键而更新,以便每次都清除/重置它们。其效果是,尝试键入数字(如 1234)将导致<input>
显示"$3.004"或"$4.00"(尽管您可能会在键入时看到:"$1.00"$1.002"$2.00"$2.003"或"$3.00")。
我认为过滤器和组件之间存在冲突,该组件对值(?
我很有可能没有正确实现这一点。我将问题提炼为以下 JSFiddle 中的突出组件......
http://jsfiddle.net/itopizarro/b9a2oyL4/
我认为主要问题与currency
过滤器有关。每次输入中出现key
事件时,都会发生以下情况:
- 模型的值将更新为输入的值
- 更新后的模型被读取,通过货币过滤器过滤并显示在输入中(您的光标放在最后)
当您键入 1-2-3 时,它如下所示:
1 =>
- baz = 1
- 输入显示 $1.00
2 =>
- baz = "$1.002"
- 输入显示"(因为货币筛选器无法解析"$1.002")
3 =>
- baz = 3
- 输入显示"$3.00"
部分问题在于内置currency
过滤器是单向过滤器 - 它格式化模型以进行显示,但在数据写回时不执行任何操作。您可以尝试编写自己的双向货币筛选器。下面是一个示例:
Vue.filter('currencyInput', {
// model -> view
read: function(value) {
// use the built-in currency filter for display
var currencyFilter = Vue.filter('currency');
return currencyFilter(value);
},
// view -> model
write: function(value, oldValue) {
var number = +value.replace(/[^'d.]/g, '')
return isNaN(number) ? 0 : parseFloat(number.toFixed(2))
}
})
这可确保模型显示为货币,但写入/存储为数字。但这仍然不完美,因为每次您键入时,数据都会被格式化并且光标移动到末尾。
您可以在输入上使用debounce
或lazy
属性,以便在用户暂停或离开字段之前不会进行更新。
<input id="example" type="tel" v-model="baz | currencyInput" debounce="500" v-validate:baz="['required']" />
但是,当用户键入时,您不会立即获得格式。
我想这取决于您的要求。希望这能给你一些想法。
相关文章:
- 如何创建带有插槽的vue js组件预加载程序
- [Vue warn]:未能解析组件
- Angular JS Filter-通过3个复选框进行筛选
- 引用vue.js中v-for中的上一个值
- 如何访问<插槽>内部v-for(vue.js)
- [Vue warn]:找不到元素
- 使用filter和map方法将数组中某些元素的第一个字母大写-JavaScript
- 如何确定Vue何时完成DOM更新
- Fresh Spark Install+Homestead上的Vue异步堆栈跟踪错误
- Vue iFrames与Vue路由器
- 调用laravel{{action(Controller@method}}通过传递vue.js数组中的变量
- 访问vue组件中的ID标记
- 为什么这个array.filter总是不返回任何内容
- 如何在模态实例中使用filter
- 使用“;布尔“;作为JavaScript中.filter()的参数
- Vue.js获取组件中的一个元素
- 将自定义脚本加载到Vue.js组件中
- orderBy$filter在项目删除(拼接)后阻止ng重复列表更新
- Vue.js (v. 1.0.14) Vue Filter versus Vue Validator
- Vue.js和vue-moment: "无法解析filter: moment"