为什么升级到 Alpinejs 3.2 菜单不起作用?
Why Upgrading to Alpinejs 3.2 menu does noes not work?
在 Laravel 8 / Alpinejs 2.8 应用程序中,我有像
这样的切换菜单
<!--Toggle button (hidden on large screens)-->
<button
@click="isOpen = !isOpen"
type="button"
class="block lg:hidden px-2 text-gray-500 hover:text-white focus:outline-none focus:text-white"
:class="{ 'transition transform-180': isOpen }"
>
<svg
class="h-6 w-6 fill-current"
xmlns="http://www.w3.org/2000/svg"
viewBox="0 0 24 24"
>
<path
x-show="isOpen"
fill-rule="evenodd"
clip-rule="evenodd"
d="M18.278 16.864a1 1 0 0 1-1.414 1.414l-4.829-4.828-4.828 4.828a1 1 0 0 1-1.414-1.414l4.828-4.829-4.828-4.828a1 1 0 0 1 1.414-1.414l4.829 4.828 4.828-4.828a1 1 0 1 1 1.414 1.414l-4.828 4.829 4.828 4.828z"
/>
<path
x-show="!isOpen"
fill-rule="evenodd"
d="M4 5h16a1 1 0 0 1 0 2H4a1 1 0 1 1 0-2zm0 6h16a1 1 0 0 1 0 2H4a1 1 0 0 1 0-2zm0 6h16a1 1 0 0 1 0 2H4a1 1 0 0 1 0-2z"
/>
</svg>
</button>
<!--Menu-->
<div
class="w-full flex-grow lg:flex lg:items-center lg:w-auto"
:class="{ 'block shadow-3xl': isOpen, 'hidden': !isOpen }"
@click.away="isOpen = false"
x-show.transition="true"
>
<ul
class="pt-6 lg:pt-0 list-reset lg:flex justify-end flex-1 items-center"
>
<li class="mr-3">
它工作正常。
升级到 Alpinejs 3.2 已修改
@click.away="isOpen = false"
与@click.away="isOpen = false"
与
@click.outside="isOpen = false"
和
x-show.transition="true"
进入
x-show="true"
x-transition
但之后下拉菜单根本不可见。
为什么会这样,如何解决?
修改#1:
如果更改菜单的 x-show="isOpen" 那么是的,在小型设备上菜单按预期工作,但是
在大型设备上它根本不可见
我需要以某种方式在大型设备上将 init 值设置为 true。条件:
x-show="isOpen"
md:x-show="true"
x-transition
无效
我想我可以使用包 https://github.com/jenssegers/agent 来获取这个值,具体取决于当前的设备。
有更好的决定吗?
能否请您解释一下 devtools 在调试中的作用?
谢谢!
如果你在 devtools 中检查它,当你切换 isOpen
状态时它实际上按预期工作。问题是当您单击按钮时,它也被视为菜单外的 click.away
。我建议在父元素上设置此点击。我还更改了菜单设置 - x-show 设置为 isOpen
,如 x-show="isOpen"
,并且切换语句将使用 Tailwind 的 visible
class
处理元素的可见性
<div
x-data="{ isOpen: false }"
@click.outside="isOpen = false"
>
<button
@click="isOpen = !isOpen"
type="button"
class="block lg:hidden px-2 text-gray-500 focus:outline-none"
:class="{ 'transition transform-180': isOpen }"
>
<svg
class="w-6 h-6 fill-current"
xmlns="http://www.w3.org/2000/svg"
viewBox="0 0 24 24"
>
<path
x-show="isOpen"
fill-rule="evenodd"
clip-rule="evenodd"
d="M18.278 16.864a1 1 0 0 1-1.414 1.414l-4.829-4.828-4.828 4.828a1 1 0 0 1-1.414-1.414l4.828-4.829-4.828-4.828a1 1 0 0 1 1.414-1.414l4.829 4.828 4.828-4.828a1 1 0 1 1 1.414 1.414l-4.828 4.829 4.828 4.828z"
/>
<path
x-show="!isOpen"
fill-rule="evenodd"
d="M4 5h16a1 1 0 0 1 0 2H4a1 1 0 1 1 0-2zm0 6h16a1 1 0 0 1 0 2H4a1 1 0 0 1 0-2zm0 6h16a1 1 0 0 1 0 2H4a1 1 0 0 1 0-2z"
/>
</svg>
</button>
<!--Menu-->
<div
class="flex-grow w-full lg:flex shadow-3xl lg:items-center lg:w-auto"
:class="[ isOpen ? 'visible' : 'unvisible' ]"
x-show="isOpen"
x-transition
>
<ul
class="items-center justify-end flex-1 pt-6 lg:pt-0 list-reset lg:flex"
>
<li class="mr-3"><a href="#">Link 1</a></li>
<li class="mr-3"><a href="#">Link 2</a></li>
</ul>
</div>
</div>
在 Laravel 8 / Alpinejs 2.8 应用程序中,我有像
这样的切换菜单<!--Toggle button (hidden on large screens)-->
<button
@click="isOpen = !isOpen"
type="button"
class="block lg:hidden px-2 text-gray-500 hover:text-white focus:outline-none focus:text-white"
:class="{ 'transition transform-180': isOpen }"
>
<svg
class="h-6 w-6 fill-current"
xmlns="http://www.w3.org/2000/svg"
viewBox="0 0 24 24"
>
<path
x-show="isOpen"
fill-rule="evenodd"
clip-rule="evenodd"
d="M18.278 16.864a1 1 0 0 1-1.414 1.414l-4.829-4.828-4.828 4.828a1 1 0 0 1-1.414-1.414l4.828-4.829-4.828-4.828a1 1 0 0 1 1.414-1.414l4.829 4.828 4.828-4.828a1 1 0 1 1 1.414 1.414l-4.828 4.829 4.828 4.828z"
/>
<path
x-show="!isOpen"
fill-rule="evenodd"
d="M4 5h16a1 1 0 0 1 0 2H4a1 1 0 1 1 0-2zm0 6h16a1 1 0 0 1 0 2H4a1 1 0 0 1 0-2zm0 6h16a1 1 0 0 1 0 2H4a1 1 0 0 1 0-2z"
/>
</svg>
</button>
<!--Menu-->
<div
class="w-full flex-grow lg:flex lg:items-center lg:w-auto"
:class="{ 'block shadow-3xl': isOpen, 'hidden': !isOpen }"
@click.away="isOpen = false"
x-show.transition="true"
>
<ul
class="pt-6 lg:pt-0 list-reset lg:flex justify-end flex-1 items-center"
>
<li class="mr-3">
它工作正常。 升级到 Alpinejs 3.2 已修改
@click.away="isOpen = false"
与@click.away="isOpen = false" 与
@click.outside="isOpen = false"
和
x-show.transition="true"
进入
x-show="true"
x-transition
但之后下拉菜单根本不可见。
为什么会这样,如何解决?
修改#1:
如果更改菜单的 x-show="isOpen" 那么是的,在小型设备上菜单按预期工作,但是 在大型设备上它根本不可见
我需要以某种方式在大型设备上将 init 值设置为 true。条件:
x-show="isOpen" md:x-show="true" x-transition
无效
我想我可以使用包 https://github.com/jenssegers/agent 来获取这个值,具体取决于当前的设备。 有更好的决定吗?
能否请您解释一下 devtools 在调试中的作用?
谢谢!
如果你在 devtools 中检查它,当你切换 isOpen
状态时它实际上按预期工作。问题是当您单击按钮时,它也被视为菜单外的 click.away
。我建议在父元素上设置此点击。我还更改了菜单设置 - x-show 设置为 isOpen
,如 x-show="isOpen"
,并且切换语句将使用 Tailwind 的 visible
class
<div
x-data="{ isOpen: false }"
@click.outside="isOpen = false"
>
<button
@click="isOpen = !isOpen"
type="button"
class="block lg:hidden px-2 text-gray-500 focus:outline-none"
:class="{ 'transition transform-180': isOpen }"
>
<svg
class="w-6 h-6 fill-current"
xmlns="http://www.w3.org/2000/svg"
viewBox="0 0 24 24"
>
<path
x-show="isOpen"
fill-rule="evenodd"
clip-rule="evenodd"
d="M18.278 16.864a1 1 0 0 1-1.414 1.414l-4.829-4.828-4.828 4.828a1 1 0 0 1-1.414-1.414l4.828-4.829-4.828-4.828a1 1 0 0 1 1.414-1.414l4.829 4.828 4.828-4.828a1 1 0 1 1 1.414 1.414l-4.828 4.829 4.828 4.828z"
/>
<path
x-show="!isOpen"
fill-rule="evenodd"
d="M4 5h16a1 1 0 0 1 0 2H4a1 1 0 1 1 0-2zm0 6h16a1 1 0 0 1 0 2H4a1 1 0 0 1 0-2zm0 6h16a1 1 0 0 1 0 2H4a1 1 0 0 1 0-2z"
/>
</svg>
</button>
<!--Menu-->
<div
class="flex-grow w-full lg:flex shadow-3xl lg:items-center lg:w-auto"
:class="[ isOpen ? 'visible' : 'unvisible' ]"
x-show="isOpen"
x-transition
>
<ul
class="items-center justify-end flex-1 pt-6 lg:pt-0 list-reset lg:flex"
>
<li class="mr-3"><a href="#">Link 1</a></li>
<li class="mr-3"><a href="#">Link 2</a></li>
</ul>
</div>
</div>