复选框在 Laravel Nova 自定义工具中不起作用
Checkboxes not working in Laravel Nova custom tool
所以我是 Laravel Nova 的新手,现在正在尝试自定义工具。
在我的自定义工具中,我的 tool.vue 组件中有一个复选框。我使用 laravel nova.
中已经可用的 vue 复选框组件
<checkbox/>
复选框按应有的方式出现在表单中,但是当我单击它时没有任何反应。它没有得到检查,组件的切换事件也没有触发。
提前致谢。
Laravel Nova 提供的Checkbox
Vue 组件从父组件接受一个 prop 来判断复选框是否被选中,并且只发出一个名为 input
的事件当复选框被点击,所以这就是当您点击它时复选框没有被选中的原因。
这是位于 nova/resources/js/components/Index/Checkbox.vue
的组件
<template>
<div class="flex items-center">
<div
:disabled="disabled"
class="checkbox select-none rounded"
tabindex="0"
role="checkbox"
:aria-checked="checked"
@keydown.prevent.space.enter="toggle"
@click="toggle"
>
<input class="hidden" type="checkbox" :checked="checked" :disabled="disabled" />
<div class="check">
<svg
class="block"
v-if="checked"
width="20"
height="20"
xmlns="http://www.w3.org/2000/svg"
viewBox="0 0 20 20"
>
<g id="Page-1" fill="none" fill-rule="evenodd">
<g id="checkbox-on" fill-rule="nonzero">
<g id="b-link" fill="var(--primary)">
<rect id="b" width="20" height="20" rx="4" />
</g>
<path
id="Shape"
fill="#FFF"
d="M7.7 9.3c-.23477048-.3130273-.63054226-.46037132-1.01285927-.37708287-.38231702.08328846-.68093514.38190658-.7642236.7642236C5.83962868 10.0694577 5.9869727 10.4652295 6.3 10.7l2 2c.38884351.3811429 1.01115649.3811429 1.4 0l4-4c.3130273-.23477048.4603713-.63054226.3770829-1.01285927-.0832885-.38231702-.3819066-.68093514-.7642236-.7642236C12.9305423 6.83962868 12.5347705 6.9869727 12.3 7.3L9 10.58l-1.3-1.3v.02z"
/>
</g>
</g>
</svg>
<svg
class="block"
v-else
width="20"
height="20"
xmlns="http://www.w3.org/2000/svg"
viewBox="0 0 20 20"
>
<g id="Page-1" fill="none" fill-rule="evenodd">
<g id="checkbox-off">
<g id="b-link" fill="#FFF" fill-rule="nonzero">
<rect id="b" width="20" height="20" rx="4" />
</g>
<rect
id="Rectangle-path"
width="19"
height="19"
x=".5"
y=".5"
stroke="#CCD4DB"
rx="4"
/>
</g>
</g>
</svg>
</div>
</div>
<slot />
</div>
</template>
<script>
export default {
props: {
disabled: {
type: Boolean,
default: false,
},
checked: {
// type: Boolean,
default: false,
},
},
methods: {
toggle(event) {
this.$emit('input', !this.checked)
},
},
}
</script>
所以你需要做的就是监听点击事件并像这样将数据作为道具传递
ParentComponent.vue
<template>
<form>
<checkbox @input="toggle" :checked="checked"/>
</form>
</template>
<script>
export default {
data() {
return {
checked: false,
}
},
methods: {
toggle() {
this.checked = !this.checked;
}
}
}
</script>
希望这对您有所帮助
所以我是 Laravel Nova 的新手,现在正在尝试自定义工具。
在我的自定义工具中,我的 tool.vue 组件中有一个复选框。我使用 laravel nova.
中已经可用的 vue 复选框组件<checkbox/>
复选框按应有的方式出现在表单中,但是当我单击它时没有任何反应。它没有得到检查,组件的切换事件也没有触发。
提前致谢。
Laravel Nova 提供的Checkbox
Vue 组件从父组件接受一个 prop 来判断复选框是否被选中,并且只发出一个名为 input
的事件当复选框被点击,所以这就是当您点击它时复选框没有被选中的原因。
这是位于 nova/resources/js/components/Index/Checkbox.vue
<template>
<div class="flex items-center">
<div
:disabled="disabled"
class="checkbox select-none rounded"
tabindex="0"
role="checkbox"
:aria-checked="checked"
@keydown.prevent.space.enter="toggle"
@click="toggle"
>
<input class="hidden" type="checkbox" :checked="checked" :disabled="disabled" />
<div class="check">
<svg
class="block"
v-if="checked"
width="20"
height="20"
xmlns="http://www.w3.org/2000/svg"
viewBox="0 0 20 20"
>
<g id="Page-1" fill="none" fill-rule="evenodd">
<g id="checkbox-on" fill-rule="nonzero">
<g id="b-link" fill="var(--primary)">
<rect id="b" width="20" height="20" rx="4" />
</g>
<path
id="Shape"
fill="#FFF"
d="M7.7 9.3c-.23477048-.3130273-.63054226-.46037132-1.01285927-.37708287-.38231702.08328846-.68093514.38190658-.7642236.7642236C5.83962868 10.0694577 5.9869727 10.4652295 6.3 10.7l2 2c.38884351.3811429 1.01115649.3811429 1.4 0l4-4c.3130273-.23477048.4603713-.63054226.3770829-1.01285927-.0832885-.38231702-.3819066-.68093514-.7642236-.7642236C12.9305423 6.83962868 12.5347705 6.9869727 12.3 7.3L9 10.58l-1.3-1.3v.02z"
/>
</g>
</g>
</svg>
<svg
class="block"
v-else
width="20"
height="20"
xmlns="http://www.w3.org/2000/svg"
viewBox="0 0 20 20"
>
<g id="Page-1" fill="none" fill-rule="evenodd">
<g id="checkbox-off">
<g id="b-link" fill="#FFF" fill-rule="nonzero">
<rect id="b" width="20" height="20" rx="4" />
</g>
<rect
id="Rectangle-path"
width="19"
height="19"
x=".5"
y=".5"
stroke="#CCD4DB"
rx="4"
/>
</g>
</g>
</svg>
</div>
</div>
<slot />
</div>
</template>
<script>
export default {
props: {
disabled: {
type: Boolean,
default: false,
},
checked: {
// type: Boolean,
default: false,
},
},
methods: {
toggle(event) {
this.$emit('input', !this.checked)
},
},
}
</script>
所以你需要做的就是监听点击事件并像这样将数据作为道具传递
ParentComponent.vue
<template>
<form>
<checkbox @input="toggle" :checked="checked"/>
</form>
</template>
<script>
export default {
data() {
return {
checked: false,
}
},
methods: {
toggle() {
this.checked = !this.checked;
}
}
}
</script>
希望这对您有所帮助