【发布时间】:2020-03-04 06:11:20
【问题描述】:
不太确定我是否理解手册(或 vue.js)中的“非道具属性”:https://vuejs.org/v2/guide/components-props.html
假设我有 ChildComponent.vue 文件:
<template>
<input type="text" class="input" :value="childValue" v-on="listeners">
</template>
<script>
export default {
props: {
childValue: {
type: String,
default: 'blah',
}
},
computed: {
listeners() {
return {
// Pass all component listeners directly to input
...this.$listeners,
// Override input listener to work with v-model
input: event => this.$emit('input', event.target.value)
}
}
}
}
</script>
然后我像这样将它添加到 ParentComponent:
<template>
<ChildComponent v-model="parentValue" placeholder="default" @keydown.enter="parentMethod"/>
</template>
<script>
export default {
data () {
return {
parentValue: "",
};
},
methods: {
parentMethod () {
...
}
},
}
</script>
流程应该是(并且像这样工作) - 在按下 Enter 后写入 ChildComponent 中的文本字段的任何内容都应该一直发送到 ParentComponent,因为应该调用 parentValue 和 parentMethod()。
-
1234563
1234563 p>
另一个问题 -
v-on="listeners"是如何在不指定事件的情况下工作的,这是否意味着我正在收听每个事件? 在父组件中有一个简写@keydown.enter这意味着它正在侦听 keydown.enter 事件,但在listeners()方法中我发出了一个input事件...我也很难理解
listeners()方法中发生的事情,因此任何有助于破译这一点的帮助将不胜感激。 :D
提前感谢您的帮助。
干杯
【问题讨论】:
标签: vue.js