#php #laravel #laravel-livewire
#php #laravel #laravel-livewire
Вопрос:
Я попытался передать переменную из компонента livewire:
class Index extends Component
{
public function render()
{
return view('livewire.index')->with('type', config('constants.NONAUTH'));
}
}
и доступ к нему из layouts.app:
<!DOCTYPE html>
<html lang="{{ str_replace('_', '-', app()->getLocale()) }}">
{{dd($type)}}
@include('includes.head')
...
Я получаю сообщение об ошибке, которое $type
не определено, каков правильный способ сделать это?
Комментарии:
1. Вы должны создать
layouts.app
компонент livewire, так как этот компонент является дочерним по отношению кlayout.app
, у него не было бы доступа ни к каким данным внутри.2.
layouts.app
является ли макет по умолчанию, который выдает содержимое компонентаlivewire.index
, как вы предлагаете мне сделать его компонентом в этом случае? @OzanKurt3. Просто создайте новый компонент Livewire с именем
LayoutApp
и вернитеlayouts.app
представление. НО сейчас моему мозгу приходится нелегко. Тогда как бы вы расширили свои другие представления на layouts.app…4. Извините, мой подход, вероятно, не сработает : (
5. На самом деле это не так, это также предполагает, что я хочу отображать
layouts.app
как компонент, когда на самом деле это просто макет — оболочка. Спасибо за вашу помощь.
Ответ №1:
объявите общедоступную переменную $type и установите эту переменную внутри вашей функции mount() следующим образом:
class Index extends Component
{
public $type = null;
public function render()
{
return view('livewire.index');
}
public function mount()
{
$this->type = config('constants.NONAUTH');
}
}
Отредактировано:
Я вижу, я понял вас неправильно в первый раз,. Я снова прочитал и понял, что то, что вы хотите, не сработает, потому что вы пытаетесь получить доступ к переменной, которая объявляется после макета вашего приложения. Livewire визуализирует свой компонент сразу после загрузки вашего макета. Я бы рекомендовал вам создать весь макет вашего приложения, используя livewire.
Да, могут быть различные способы объявления чего-либо из livewire в вашем блейде. Вот один:
Вы можете запустить событие, которое может быть прослушано global JS внутри вашего блейда. затем вы можете установить это значение внутри вашего блейд-компонента, используя jquery / vanilla js.
Комментарии:
1. Я также пробовал это до запроса, это не работает.