简体   繁体   English

Vue.js中的实用程序方法

[英]Utility method in Vue.js

I am trying to create a utility method in Vue.js to validate a decimal number from any input field but I'm not sure how to set the value in Vue.js internally. 我正在尝试在Vue.js中创建一个实用程序方法,以验证任何输入字段中的十进制数字,但是我不确定如何在内部设置Vue.js中的值。

This is what I did in jQuery before: 这是我之前在jQuery中所做的:

$('body').on('blur', '.decimal', function() {
    var val = $(this).val();
    if ($.isNumeric(val)) {
        val = parseFloat(val).toFixed(2);
        $(this).val(val);
    } else {
        $(this).val('');
    }
});

This is what I have in Vue but the value is not stored internally and is overwritten. 这是我在Vue中拥有的东西,但是该值未在内部存储并被覆盖。

function isNumeric(n) {
    return !isNaN(parseFloat(n)) && isFinite(n);
}
methods: {
    validateDecimal: function (e) {
        var val = e.target.value;

        if (isNumeric(val)) {
            e.target.value = parseFloat(val).toFixed(2);
        } else {
            e.target.value = '';
        }
    }
}

HTML 的HTML

<input class="ui-input" :value="some.value" placeholder="0.00" @blur="validateDecimal">
<input class="ui-input" :value="some.othervalue" placeholder="0.00" @blur="validateDecimal">
<input class="ui-input" :value="another.dynamic.input" placeholder="0.00" @blur="validateDecimal">

Apparently you can pass the data object reference to the handler method like so: (Note you can't just pass the data property, because I don't believe it will be a reference.) 显然,您可以将数据对象引用传递给处理程序方法,如下所示:(请注意,您不能只传递data属性,因为我不认为它将是引用。)

 new Vue({ el: '#app', data: { message: 'Hello Vue.js!', inputs:{ 'v1':{ value:'1.256' }, 'v2':{ value:'1.521' } }, someInput:{value:'1.7125'} }, methods:{ validateDecimal: function (o,p,e) { console.log('validateDecimal',o); var val = e.target.value; console.log(val); if (Number(parseFloat(val)) == val) { val = parseFloat(val).toFixed(2); this.$set(o, p, val); } else { this.$set(o, p, ''); e.target.value = ''; } }, foo: function(){ console.log(this.inputs.v1.value) console.log(this.inputs.v2.value) } } }) 
 <script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script> <div id="app"> <div v-for="i,key in this.inputs"> <input class="ui-input" :value="i.value" placeholder="0.00" @blur="validateDecimal(i, 'value', $event)"> </div> <div> <input class="ui-input" :value="this.someInput.value" placeholder="0.00" @blur="validateDecimal(someInput,'value', $event)"> </div> <button @click="foo">Click</button> </div> 

Edit by OP: Adding an extra parameter for the name of the property and using $set to make the dynamic property reactive. 由OP编辑:为属性名称添加一个额外的参数,并使用$set使动态属性具有反应性。 This should make the method more general purpose for any dynamic input fields with any property name. 这应该使该方法对于具有任何属性名称的任何动态输入字段而言更具通用性。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM