在某些情况下使用Vue观察大家工作的价值

时间:2017-05-19 07:31:59

标签: vue.js vuejs2

我想在手表中将数字更改为int,但它不起作用。

index.vue:

<template>
    <test v-model="value" />
</template>
<script>
    import Test from './test.vue';
    export default {
        components: {
            test: Test,
        },
        data() {
            return {
                value: 1,
            };
        },
        watch: {
            value(val) {
                this.value = parseInt(val);
                // this.value = 2;
            }
        }
    };
</script>

test.vue:

<template>
    <div class="el-input-number">
        <input
        :value="currentValue"
        @input="handleInput"
        ref="input"
        />
    </div>
</template>
<script>

    export default {
        name: 'ElInputNumber',
        props: {
            value: {
                default: 0
            },
        },
        data() {
            return {
                currentValue: 1
            };
        },
        watch: {
            value(value) {
                console.log('value change', value);
                let newVal = Number(value);
                if (isNaN(newVal)) return;
                this.currentValue = newVal;
                this.$emit('input', newVal);
            }
        },
        computed: {
        },
        methods: {
            setCurrentValue(newVal) {
                const oldVal = this.currentValue;
                if (oldVal === newVal) return;
                this.$emit('change', newVal, oldVal);
                this.$emit('input', newVal);
                this.currentValue = newVal;
            },
            handleInput(e) {
                const value = e.target.value;
                const newVal = Number(value);
                if (!isNaN(newVal)) {
                this.setCurrentValue(newVal);
                }
            }
        }
    };
</script>

主要代码是this.value = parseInt(val) 初始值为1.我在输入中键入1.1。然后我看到了变化 设置this.value后,不会调用值监视功能。没有日志 更奇怪的是,如果我将this.value = parseInt(val)更改为this.value = 2,它会运行一次,但第二次更改值时,它不起作用。

代码在这里:https://github.com/lext-7/vue-watch-component-demo

运行它,并在该输入中键入1.1。你会发现它不会变成1。

0 个答案:

没有答案