您的建议是正确的:您想绑定href 属性,以便它初始化到当前路由,但您还希望能够更新它。为此,您需要 x-data(Alpine.js 状态)上的 url 属性。
这一切看起来像下面这样:
<a
x-data="{ url: '{{ route('dog', ['dog'=>$selectedDog]) }}' }"
href="{{ route('dog', ['dog'=>$selectedDog]) }}"
x-bind:href="url"
>
Pet Dog
</a>
在select 方面,您需要使用x-on:change 获取任何更改,然后您需要使用自定义事件进行广播。在 Alpine.js 中,这可以使用 $dispatch 来完成。
在原始 HTML 中你会这样做:
<select x-on:change="$dispatch('selection-change', { value: $event.target.value })">
<option value="first-option">First option</option>
</select>
可以映射到 LaravelCollective HTML:
{{ Form::select('dogs', $dogs, ['x-on:change' => '$dispatch("selection-change", { value: $event.target.value })'] }}
最后,您需要在 a 中处理 selection-change 自定义事件,使用 x-on:selection-change.window 或 x-on:selection-change.document (.window/.document 将侦听器附加到窗口或文档而不是指令所在的元素/属性放置)。您可能希望根据value 计算新的url 和text。
<a
x-data="{ url: '{{ route('dog', ['dog'=>$selectedDog]) }}', selectedDog: '{{ $selectedDog }}' }"
href="{{ route('dog', ['dog'=>$selectedDog]) }}"
x-on:selection-change.window="
url = url.replace(selectedDog, $event.detail.value);
selectedDog = $event.detail.value;
"
x-bind:href="url"
>
Pet Dog
</a>