如何将道具传递给 Vuejs 中的输入值
How to pass props to input value in Vuejs
我有一个父组件作为购物车。这里我定义了数量,我想将这个数量传递给子组件的输入值,即 Counter。所以这是我传递它的方式 这是我的父组件 Cart:
<Counter quantity="item.quantity"/>
这是我的子组件,计数器:
<template>
<div id="counter">
<button class="minus" @click="countDown"><i :class="quantity == 0 ? 'disabled' : ''" class="fas fa-minus"></i></button>
<div class="count-number"><input class="counter-content" type="number" v-model="quantity"></div>
<button class="plus" @click="countUp"><i class="fas fa-plus"></i></button>
</div>
</template>
<script>
export default {
props: {
quantity: Number
},
methods: {
countUp() {
this.quantity++;
},
countDown() {
if(this.quantity > 0) {
this.quantity--;
}
},
}
}
</script>
我是 Vue 的新手,所以我传递道具时可能做错了什么。那么你能帮我解决这个问题吗?
尝试(使用 : 冒号)
<Counter :quantity="item.quantity"/>
之前你只是传递字符串“item.quanity”
我看到你在直接修改你的道具:
countUp() {
this.quantity++;
},
countDown() {
if(this.quantity > 0) {
this.quantity--;
}
},
这不是您在 Vue 中的做法。您需要使用双向绑定。
countUp() {
this.$emit('input', this.quantity+1)
}
countDown() {
this.$emit('input', this.quantity-1)
}
并在您的父组件中:
<Counter :quantity="item.quantity" @input="(payload) => {item.quantity = payload}"/>
顺便说一下,Vue 样式指南建议使用多词组件名称:https://vuejs.org/v2/style-guide/#Multi-word-component-names-essential(Cart = bad,MyCart = good)
我们无法更改从 props 获得的值,所以我创建了一个变量并在安装时将 props 放在那里
试一试
<Counter :quantity="item.quantity"/>
和
<template>
<div id="counter">
<button class="minus" @click="countDown"><i :class="sum == 0 ? 'disabled' : ''" class="fas fa-minus"></i></button>
<div class="count-number"><input class="counter-content" type="number" v-model="sum"></div>
<button class="plus" @click="countUp"><i class="fas fa-plus"></i></button>
</div>
</template>
<script>
export default {
props: {
quantity: Number
},
data: () => ({
sum: 0
}),
mounted() {
this.sum = this.quantity;
},
methods: {
countUp() {
this.sum++;
},
countDown() {
if(this.sum > 0) {
this.sum--;
}
},
}
}
</script>
我有一个父组件作为购物车。这里我定义了数量,我想将这个数量传递给子组件的输入值,即 Counter。所以这是我传递它的方式 这是我的父组件 Cart:
<Counter quantity="item.quantity"/>
这是我的子组件,计数器:
<template>
<div id="counter">
<button class="minus" @click="countDown"><i :class="quantity == 0 ? 'disabled' : ''" class="fas fa-minus"></i></button>
<div class="count-number"><input class="counter-content" type="number" v-model="quantity"></div>
<button class="plus" @click="countUp"><i class="fas fa-plus"></i></button>
</div>
</template>
<script>
export default {
props: {
quantity: Number
},
methods: {
countUp() {
this.quantity++;
},
countDown() {
if(this.quantity > 0) {
this.quantity--;
}
},
}
}
</script>
我是 Vue 的新手,所以我传递道具时可能做错了什么。那么你能帮我解决这个问题吗?
尝试(使用 : 冒号)
<Counter :quantity="item.quantity"/>
之前你只是传递字符串“item.quanity”
我看到你在直接修改你的道具:
countUp() {
this.quantity++;
},
countDown() {
if(this.quantity > 0) {
this.quantity--;
}
},
这不是您在 Vue 中的做法。您需要使用双向绑定。
countUp() {
this.$emit('input', this.quantity+1)
}
countDown() {
this.$emit('input', this.quantity-1)
}
并在您的父组件中:
<Counter :quantity="item.quantity" @input="(payload) => {item.quantity = payload}"/>
顺便说一下,Vue 样式指南建议使用多词组件名称:https://vuejs.org/v2/style-guide/#Multi-word-component-names-essential(Cart = bad,MyCart = good)
我们无法更改从 props 获得的值,所以我创建了一个变量并在安装时将 props 放在那里
试一试
<Counter :quantity="item.quantity"/>
和
<template>
<div id="counter">
<button class="minus" @click="countDown"><i :class="sum == 0 ? 'disabled' : ''" class="fas fa-minus"></i></button>
<div class="count-number"><input class="counter-content" type="number" v-model="sum"></div>
<button class="plus" @click="countUp"><i class="fas fa-plus"></i></button>
</div>
</template>
<script>
export default {
props: {
quantity: Number
},
data: () => ({
sum: 0
}),
mounted() {
this.sum = this.quantity;
},
methods: {
countUp() {
this.sum++;
},
countDown() {
if(this.sum > 0) {
this.sum--;
}
},
}
}
</script>