#javascript #php #jquery #laravel #laravel-livewire
Вопрос:
Я использую Laravel 8, PHP 8 и livewire 2.
У меня есть полностраничный компонент Livewire. У меня есть кнопка для переключения простого флага между ложью и истиной.
<Button wire:click="changeStatus"></Button>
В классе компонента Fullpage:
public $showUpgradeForm;
public function mount()
{
$this->showUpgradeForm = false;
}
public function changeStatus()
{
$this->showUpgradeForm = true;
}
С учетом компонента Fullpage:
@if($showUpgradeForm)
<livewire:upgrade-form>
@else
<p>show something else</p>
@endif
Все в порядке, и дочерний компонент отображается правильно, но jQuery
после этого шага любые коды не будут работать в целом для дочернего и главного компонентов.
Примечание: Я попытался загрузить jQuery.js в полностраничном блейде или в дочернем блейде ничего не изменилось.
…………………………………….. Я перепробовал множество способов решения этой проблемы. и, наконец, я понял, что в полностраничных компонентах я не могу использовать операторы @if для отображения форм, в которых используются некоторые операторы jQuery, такие как проверка jquery и … В этой ситуации из-за обновления всех других элементов DOM в компоненте Fullpage эти работающие компоненты jQuery выйдут из строя.
Для решения этой проблемы я использовал промежуточный компонент, который действует как переключатель. и я делаю операторы @if для этого компонента, чтобы показать другие дочерние компоненты.
Теперь это работает на меня как заклинание!
Комментарии:
1. Можете ли вы предоставить код, который не работает?
2. код в блейде родителя находится в контейнере div?
3. @Просперо да, это так.
4. @Peppermintology все коды jQuery не будут работать, когда дочерний компонент будет отображаться внутри родительского компонента. например: фон параллакса, проверка, слайдер, …
Ответ №1:
Эмиссия из компонента PHP
$this->emit('your_event');
И зацепитесь за свой клинок, чтобы загрузить js-код
@section('script')
<script>
window.livewire.on('your_event', message => {
alert('go');
// your js code
});
</script>
@endsection