【发布时间】:2021-06-27 09:42:20
【问题描述】:
谁能解释一下这个案例?
我目前有一个自定义复选框vue 组件,看起来像这样(我正在使用tailwindcss,顺便说一下它太酷了)
// MyCheckbox.vue
<template>
<div class="grid grid-flow-col auto-cols-max gap-1 place-items-center">
<input
@change="(event) => $emit('update:checked', event.target.checked)"
type="checkbox"
:checked="checked"
:class="{ 'cursor-pointer': !disabled }"
class="bg-white my-checkbox appearance-none h-5 w-5 m-1 border text-royal border-grey-2 checked:bg-royal rounded focus:outline-none"
/>
<label v-if="label" class="font-medium">{{ label }}</label>
</div>
</template>
<script>
export default {
name: 'MyCheckbox',
props: {
checked: {
type: Boolean,
default: false,
},
label: {
type: String,
default: '',
},
},
},
</script>
<style lang="scss" scoped>
.my-checkbox:checked {
background-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyMCAyMCIgZmlsbD0id2hpdGUiPgogIDxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgZD0iTTE2LjcwNyA1LjI5M2ExIDEgMCAwMTAgMS40MTRsLTggOGExIDEgMCAwMS0xLjQxNCAwbC00LTRhMSAxIDAgMDExLjQxNC0xLjQxNEw4IDEyLjU4Nmw3LjI5My03LjI5M2ExIDEgMCAwMTEuNDE0IDB6IiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIC8+Cjwvc3ZnPg==);
border-color: transparent;
background-size: 100% 100%;
background-position: 50%;
background-repeat: no-repeat;
}
如果我在另一个组件中生成带有v-for 循环的组件,如下面的代码,则无论何时我选中或取消选中它,v-model 都不会更改。
// AnotherComponent.vue
<template>
<div class="grid grid-flow-col auto-cols-max gap-6">
<my-checkbox
v-for="obj in [{ state: true, id: 1 }, { state: true, id: 2 }, { state: false, id: 3 }]"
:key="obj.id"
v-model:checked="obj.state"
:label="`Item ${obj.state}`"
/>
</div>
</template>
<script>
import MyCheckbox from '@/components/MyCheckbox.vue';
export default {
name: 'AnotherComponent',
}
</script>
但是当我像这样循环遍历本地状态时,状态会发生变化,它可以正常工作
// AnotherComponent.vue
<template>
<div class="grid grid-flow-col auto-cols-max gap-6">
<my-checkbox
v-for="obj in anArrayOfObj"
:key="obj.id"
v-model:checked="obj.state"
:label="`Item ${obj.state}`"
/>
</div>
</template>
<script>
import MyCheckbox from '@/components/MyCheckbox.vue';
export default {
name: 'AnotherComponent',
data() {
return {
anArrayOfObj: [
{ state: false, id: 1 },
{ state: false, id: 2 },
{ state: false, id: 3 },
{ state: false, id: 4 },
{ state: true, id: 5 },
],
}
}
</script>
[{ state: true, id: 1 }, { state: true, id: 2 }, { state: false, id: 3 }] 不能反应吗?如果是,是否有解决方法来操纵其中的布尔 v 模型?因为我在另一种情况下从v-slotscoped slot data 获取数组(涉及另一个更复杂的组件)
【问题讨论】:
标签: javascript vue.js vuejs2 vuejs3 v-model