首页 > 解决方案 > Livewire 魔术动作不起作用 Uncaught ReferenceError: $event is not defined

问题描述

<div class="row">
    <div class="col">
        <div class="container">
            <div class="card">
                <div class="card-body">
                    <div class="row">
                        <div class="col">
                            <div class="mb-5">
                                <label class="form-label">Order: </label>
                                <select wire:change="selectOrder($event.target.value)">
                                    @foreach($orders as $option)
                                        <option value="{{$option['id']}}">{{$option['id']}}</option>
                                    @endforeach
                                </select>
                            </div>

                        </div>
                    </div>
                </div>
            </div>
        </div>
    </div>
</div>
public function selectOrder($order)
{
    $this->order = $order;
    $this->products = $this->order->products;
}

在此处输入图像描述

这是一个火线组件,它有一个选择输入,我在更改选择时需要selectOrder使用所选值执行函数,我使用$event魔术动作,但出现以下错误。

标签: laraveleventslaravel-livewirealpine.js

解决方案


$event是 Alpine.js 的神奇属性。所以解决它的一种方法是使用调用 Livewire 方法的 Alpine.js 事件监听器。

<select x-on:change="$wire.selectOrder($event.target.value)">

也就是说,您可以使用 Livewire 类中的属性,并将选择绑定到模型,

<select wire:model="orderValue">

然后在组件中监听那个变化。

public $orderValue;

// ...

public function updated($field, $value)
{
    if ($field === 'orderValue') {
        $this->selectOrder($value);
    }
}

推荐阅读