【问题标题】:how to dispatch param using x-init in Alpinejs如何在 Alpinejs 中使用 x-init 调度参数
【发布时间】:2022-01-13 19:59:04
【问题描述】:

我的 Alpinejs 组件代码在 EventListener 中,我希望使用魔法 $dispatch 从组件外部传递标题字符串。我只能使用 onclick 事件来实现这一点,但确实需要在页面加载时执行此操作。

这是组件外部的代码,用于使用@click 传递标题。这可行,但需要在页面加载时设置(在 Alpinejs 中我相信这是 x-init)


<div x-data>
  <button 
    @click="$dispatch('myparams', { title: 'The title' })"
    type="button" 
  >
    More info
  </button>
</div>

使用 x-init 不适用于以下内容

<div 
  x-data 
  x-init="() => $dispatch('myparams', {'title': 'Initialised'})"
// x-init="$dispatch('myparams', {'title': 'Initialised'})"
>
</div>

这是我尝试从外部接收数据的组件

<section 
  x-data="mypage"
  @myparams.window="title = $event.detail.title"
>
  <h2 x-text="title"></h2>
</section>

<script>
document.addEventListener('alpine:init', () => {
    Alpine.data('mypage', () => ({
      title: '',
      init() {
        @myparams.window="title = $event.detail.title"
        console.log('I will get evaluated when initializing this component.')
      },
    }))
})
</script>

【问题讨论】:

    标签: javascript alpine.js


    【解决方案1】:

    这种行为的原因是您在初始化myparams 事件的侦听器之前调度了myparams 事件。所以第一次没人听。

    面向未来的解决方案是使用$nextTick,以便在 DOM 更新后触发调度。

    <div x-data="initMyparams"></div>
    
    <section x-data="mypage" @myparams.window="title = $event.detail.title">
      <h2 x-text="title"></h2>
    </section>
    

    我们有一个使用$nextTick 的新initMyparams 组件:

    <script>
    document.addEventListener('alpine:init', () => {
        Alpine.data('mypage', () => ({
            title: '',
            init() {
                console.log('I will get evaluated when initializing this component.')
            },
        })),
    
        Alpine.data('initMyparams', () => ({
            init() {
                this.$nextTick(() => this.$dispatch('myparams', { title: 'Initialised' }))
            },
        }))
    })
    </script>
    

    【讨论】:

    • 谢谢道罗斯。我以前从未使用过 $nextTick,因为最近才开始使用 Alpine。我确实做了一个小修改,因为需要保持 addEventListener 自己。所以结束于:。像魅力一样工作
    【解决方案2】:

    设法弄明白了。基本上我需要做的就是在 onload (x-init) 事件之前在页面上包含组件。

    【讨论】:

    • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-02-04
    • 2021-01-28
    • 1970-01-01
    • 2022-01-08
    • 2017-08-24
    • 2021-05-01
    • 2019-01-12
    相关资源
    最近更新 更多