const model = defineModel()
const model = defineModel({type: Number, default: 0 })
<Model v-model ="count" />
const num = defineModel('num')
const num = defineModel('num', { type: Number, default: 0 })
<Model v-model:num ="count" />
const first = defineModel('first')
const last = defineModel('last')
<input type="text" v-model="first"> <input type="text" v-model="last">
let user = ref({
first: 'gl',
last: 'cn'
})
<Model v-model:first="user.first" v-model:last="user.last" />
const props = defineProps({
modelValue: Number
})
const emit = defineEmits(['update:modelValue'])
const incLike = () => {
emit('update:modelValue', props.modelValue + 1)
}
<div @click="incLike"><span class="fa fa-heart"></span> {{ modelValue }}</div>
let msg = ref(0)
<List v-model="msg"></List>
<List v-model:msg="msg" v-model:tips="tips"></List>
const props = defineProps(['msg', 'tips']) const emits = defineEmits(['update:msg', 'update:tips'])
<input type="text" :value="msg" @input="$emit('update:msg', $event.target.value)">
<input type="text" :value="tips" @input="$emit('update:tips', $event.target.value)">
<div class="guarantee"> <div>guarantee</div> <button @click="model = true">show</button> </div>
const model = defineModel()
<div class="modal"> <div>modal</div> <button @click="model = false">close</button> </div>
const model = defineModel()
<Guarantee v-model="isShowModal"></Guarantee> <Modal v-model="isShowModal" v-show="isShowModal"></Modal>
import { ref } from 'vue';
import Guarantee from '@/components/Guarantee.vue';
import Modal from '@/components/Modal.vue';
const isShowModal = ref(false);
<div class="specification">
<span>{{ item.label }}</span>
<label class="specification-item" v-for="option in item.options" :key="option.id">
<input type="radio" :name="item.name" :value="option.label" v-model="model" hidden>
<span>{{ option.label }}</span>
</label>
</div>
const model = defineModel()
const props = defineProps({
item: {
type: Object,
default: {}
}
})
{
"id": 101,
"label": "杯型",
"name": "cup",
"options": [
{ "id": 1, "label": "中杯", "value": "中杯", "sel": true },
{ "id": 2, "label": "大杯", "value": "大杯", "sel": false },
{ "id": 3, "label": "超大杯", "value": "超大杯", "sel": false }
]
}
详情页规格组件效果
const props = defineProps(['dessert'])
const dessertSelected = defineModel('dessertSelected', { default: [] })
<div class="reco-dessert">
<div class="item" v-for="(item, ind) in dessert" :key="item.id">
<input class="cb" type="checkbox" name="dessert" :id="item.id" :value="item.title" v-model="dessertSelected">
<label :for="item.id">
<img class="img" :src="`https://glpla.github.io/utils/${item.img}`" alt="">
<p>{{ item.title }}</p>
<div class="price">¥{{ item.priceOrignal }}</div>
</label>
</div>
</div>
import RecoDessert from '@/components/RecoDessert.vue';
// 商品数据
const goods = ref({})
// 选择的商品数据
const goodsSelected = ref({
// ...
dessert: []
})
<RecoDessert :dessert="goods.dessert" v-model:dessertSelected="goodsSelected.dessert" />
详情页甜点组件效果