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。
不使用 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)
| 归档时间: |
|
| 查看次数: |
16462 次 |
| 最近记录: |