【发布时间】:2021-02-25 17:23:20
【问题描述】:
我正在尝试创建自己的切换组件。这个组件的行为应该像普通的<input type="checkbox" >。到目前为止,我已经创建了以下内容:
toggle.blade.php
@props([
'id' => 1
])
<div class="flex justify-center items-center">
<div {{ $attributes->whereStartsWith('class')->merge(['class' => 'relative rounded-full transition duration-200 ease-linear' ]) }}
:class="[ $refs.toggle{{ $id }}.checked ? 'bg-green-400' : 'bg-gray-400' ]">
<label for="toggle{{ $id }}"
class="absolute left-0 bg-white border-2 mb-2 w-1/2 h-full rounded-full transition transform duration-100 ease-linear cursor-pointer"
:class="[ $refs.toggle{{ $id }}.checked ? 'translate-x-full border-green-400' : 'translate-x-0 border-gray-400' ]"></label>
<input x-ref="toggle{{ $id }}" type="checkbox" id="toggle{{ $id }}" class="appearance-none w-full h-full active:outline-none focus:outline-none"
{{ $attributes }} x-init="console.log('test')" />
</div>
</div>
我怎么称呼它:
<div>
<x-inputs.toggle class="w-8 h-4" value="{{ $permission['id'] }}"
id="{{ $permission['id'] }}" x-model="permissions" /> <-- this one
<input class="form-checkbox" value="{{ $permission['id'] }}" type="checkbox" x-model="permissions">
</div>
我希望能够在我的组件上放置一个 x 模型。这样我就可以从复选框输入中使用正常的双向绑定。
上面的代码可以工作,但是因为 ref(输入)比$refs 调用晚初始化。在切换中导致错误的类,直到按下复选框/切换之一(参考更新),参见图片:
通常,我会给组件一个 x-data 并检查是否切换等。但是我不能使用 x-model,因为该模型不存在于组件的 x-data 属性中。
我还尝试过在类属性中传递x-model 的值,例如::class="[ {{ $attirubtes->whereStartsWith('x-model')->first() ? ... : ... ]"。但这也不起作用,因为我将一个数组传递给 x-model 复选框,其中 alpine.js 做了一些花哨的事情并正确处理它。
知道如何解决这个问题吗?
提前致谢。
【问题讨论】:
标签: laravel laravel-blade tailwind-css alpine.js