在 Vue 2 中更改时传递范围输入值

Glu*_*ear 6 javascript events vue.js vuejs2

在Vue 2中:我有一个App组件,它有一个Slider组件:

应用程序.vue

<template>
    <div>
        <Slider :foo="store.foo"></Slider>
    </div>
</template>

<script>
    import store from './components/store.js';
    import Slider from './components/Slider.vue';

    export default {
        name: 'app',

        components: { Slider },

        data() { 
            return {
                store: store
            }
        },

        methods: {
            changeFoo(foo) {
                console.log('change!', foo);
            },
        },
    }
</script>
Run Code Online (Sandbox Code Playgroud)

滑块.vue

<template>
    <div>
        <input type="range" min="1" max="100" step="1" @change="changeFoo" />
    </div>
</template>

<script>
    export default {
        props: ['foo'],
        methods: {
            changeFoo() {
                this.$emit('changeFoo', foo);
            }
        }
    }
</script>
Run Code Online (Sandbox Code Playgroud)

问题是滑块的值没有emit在 中的语句中传递Slider.vue。我明白为什么 - 但我不知道如何解决它。我尝试这样做:

v-model="foo"
Run Code Online (Sandbox Code Playgroud)

input元素中,但 Vue 给出警告,不允许我改变 props。

Sau*_*abh 8

不使用 prop 为滑块创建一个新的数据变量,并在发射中传递该变量,如下所示:

<template>
    <div>
        <input v-model="sliderVal" type="range" min="1" max="100" step="1" @change="changeFoo" />
    </div>
</template>

<script>
    export default {
        props: ['foo'],
        data: function() {
           return {
              sliderVal: ""
           }
        }
        methods: {
            changeFoo() {
                this.$emit('changeFoo', this.sliderVal);
            }
        }
    }
</script>
Run Code Online (Sandbox Code Playgroud)

同样在App.vue中,您必须像这样列出此发出的事件:

<template>
    <div>
        <Slider :foo="store.foo" @change-foo="changeFoo"></Slider>
    </div>
</template>
Run Code Online (Sandbox Code Playgroud)