【问题标题】:How to add classes to an element outside of AlpineJS element如何将类添加到 AlpineJS 元素之外的元素
【发布时间】:2022-01-23 01:18:36
【问题描述】:

我有一个简单的问题,但它让我疯狂地锻炼。 我正在使用 AlpineJS 来显示和隐藏内容。 通常使用 alpine,按钮和内容将在同一个元素中,但在这里我将它放在它之外。这行得通。 但是当内容打开或关闭时,我无法同时向按钮和内容 div 添加类。

谁能指导我。

<!-- button -->
<div class="mt-4" x-data="{id: 1}">
    <button 
    @click="$dispatch('open-dropdown',{id})" 
    type="button" 
    class="bg-white hover:bg-gray-50"
    :class="{ 'bg-green-400': open, 'bg-gray-200': !(open) }">
        I'm the button
    </button>
</div>

<!-- popup 1 -->
<div x-data="{ open: false }" 
x-show="open" 
@open-dropdown.window="if ($event.detail.id == 1) open = true" 
@click.away="open = false">
    <div
    class="bg-white hover:bg-gray-50"
    :class="{ 'bg-green-400': open, 'bg-gray-200': !(open) }">
        I'm the content
    </div>
</div>

【问题讨论】:

    标签: javascript alpine.js alpinejs


    【解决方案1】:

    为此,您可以将open 状态移动到可供页面上所有组件访问的全局Alpine.js' $store 对象内。

    <!-- button -->
    <div class="mt-4" x-data="{id: 1}">
      <button @click="$dispatch('open-dropdown',{id})"
              type="button"
              class="bg-white hover:bg-gray-50"
              :class="{ 'bg-green-400': $store.open, 'bg-gray-200': !($store.open) }">
          I'm the button
      </button>
    </div>
    
    <!-- popup 1 -->
    <div x-data
         x-show="$store.open"
         @open-dropdown.window="if ($event.detail.id == 1) $store.open = true"
         @click.away="$store.open = false">
      <div class="bg-white hover:bg-gray-50"
            :class="{ 'bg-green-400': $store.open, 'bg-gray-200': !($store.open) }">
        I'm the content
      </div>
    </div>
    
    <script>
    document.addEventListener('alpine:init', () => {
      Alpine.store('open', false)
    })
    </script>
    

    由于我们在商店中的open 状态是一个简单的值,我们可以将每个open 替换为$store.open。请注意,popup 1 组件仍然需要一个空的 x-data 属性。

    【讨论】:

    • 非常感谢!它完美无缺!也感谢您的解释,我正在学习,这对我很有帮助。
    • 有没有办法拥有多个按钮和内容?
    • 我尝试调整代码,但按钮相互干扰。
    • 您希望创建与应用程序中的独立功能一样多的状态变量。否则,它们都将使用相同的状态变量,这不是所需的行为。 store 也支持对象数据类型,因此您可以根据需要将这些状态变量组合在一起。
    • 像这样alpinejs.dev/essentials/state 在他们提到项目的全局状态下:['first', 'second', 'third'],
    猜你喜欢
    • 1970-01-01
    • 2014-02-14
    • 1970-01-01
    • 2013-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-15
    • 1970-01-01
    相关资源
    最近更新 更多