admin管理员组

文章数量:1244420

In Laravel 11 with Livewire 3 I need to pass a public variable $navActive from my component to the layout. I do it like any variable to the view but I get an error. The Livewire3 documentation is very general and does not talk about this. I have tried using {{ $slot }} and #[Layout('layouts.app')] but nothing. The variable does not reach the layout. My code:

public $navActive = 'profesionales';
public function render()
{
   return view('livewire.profesionales.profesionales-component')->extends('layouts.app');
}

View livewire.profesionales.profesionales-component:

    <div class="row align-items-center">
        
        @include('partials.mostrar-filas',['var' => 'numberRows'])
        
        @include('partials.barra-busqueda', ['var' => 'search'])
        
        @include('partials.show-active', ['model' => 'model_active', 'text' => 'Ocultar inactivos'])

    </div>

The layout

<!DOCTYPE html>
<html lang="es">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>{{ config('app.name') }}</title>
        <!-- boostrap5 -->
        <link href="/[email protected]/dist/css/bootstrap.min.css" rel="stylesheet">
        <link href=".css" rel="stylesheet">
        <!-- Favicon -->
        <link rel="icon" href="{{ asset('images/favicon.ico') }}" type="image/x-icon">
        <!-- Scripts -->
        @vite([ 'resources/css/app.css',  'resources/js/app.js'])
        @livewireStyles
        
        <!--jquery-->
        <script src=".7.1/jquery.min.js" integrity="sha512-v2CJ7UaYy4JwqLDIrZUI/4hqeoQieOmAZNXBeQyjo21dadnwR+8ZaIJVT8EE2iyI61OV8e6M8PP2/4hpQINQ/g==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>
        
        <!-- summernote -->
        <link href="/[email protected]/dist/summernote-lite.min.css" rel="stylesheet">
        <script src="/[email protected]/dist/summernote-lite.min.js"></script>
    <body>
        <div class="d-flex">
            {{ $navActive }}
            @include('livewire.includes.toast')
            @include('partials.sidebar')
            <div id="main-content" class="content flex-grow-1">
                @include('partials.navbar')
                <!-- Page Content -->
                <main>    
                    <div class="container-fluid"> 
                        @yield('content')
                    </div>
                </main>
            </div>

        </div>
        @livewireScripts
        <script data-navigate-once src="/[email protected]/dist/js/bootstrap.bundle.min.js" integrity="sha384-YvpcrYf0tY3lHB60NNkmXc5s9fDVZLESaAA55NDzOxhy9GkcIdslK1eN7N6jIeHz" crossorigin="anonymous"></script>
    </body>
</html>

In Laravel 11 with Livewire 3 I need to pass a public variable $navActive from my component to the layout. I do it like any variable to the view but I get an error. The Livewire3 documentation is very general and does not talk about this. I have tried using {{ $slot }} and #[Layout('layouts.app')] but nothing. The variable does not reach the layout. My code:

public $navActive = 'profesionales';
public function render()
{
   return view('livewire.profesionales.profesionales-component')->extends('layouts.app');
}

View livewire.profesionales.profesionales-component:

    <div class="row align-items-center">
        
        @include('partials.mostrar-filas',['var' => 'numberRows'])
        
        @include('partials.barra-busqueda', ['var' => 'search'])
        
        @include('partials.show-active', ['model' => 'model_active', 'text' => 'Ocultar inactivos'])

    </div>

The layout

<!DOCTYPE html>
<html lang="es">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>{{ config('app.name') }}</title>
        <!-- boostrap5 -->
        <link href="https://cdn.jsdelivr/npm/[email protected]/dist/css/bootstrap.min.css" rel="stylesheet">
        <link href="https://cdn.jsdelivr/npm/bootstrap-icons/font/bootstrap-icons.css" rel="stylesheet">
        <!-- Favicon -->
        <link rel="icon" href="{{ asset('images/favicon.ico') }}" type="image/x-icon">
        <!-- Scripts -->
        @vite([ 'resources/css/app.css',  'resources/js/app.js'])
        @livewireStyles
        
        <!--jquery-->
        <script src="https://cdnjs.cloudflare/ajax/libs/jquery/3.7.1/jquery.min.js" integrity="sha512-v2CJ7UaYy4JwqLDIrZUI/4hqeoQieOmAZNXBeQyjo21dadnwR+8ZaIJVT8EE2iyI61OV8e6M8PP2/4hpQINQ/g==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>
        
        <!-- summernote -->
        <link href="https://cdn.jsdelivr/npm/[email protected]/dist/summernote-lite.min.css" rel="stylesheet">
        <script src="https://cdn.jsdelivr/npm/[email protected]/dist/summernote-lite.min.js"></script>
    <body>
        <div class="d-flex">
            {{ $navActive }}
            @include('livewire.includes.toast')
            @include('partials.sidebar')
            <div id="main-content" class="content flex-grow-1">
                @include('partials.navbar')
                <!-- Page Content -->
                <main>    
                    <div class="container-fluid"> 
                        @yield('content')
                    </div>
                </main>
            </div>

        </div>
        @livewireScripts
        <script data-navigate-once src="https://cdn.jsdelivr/npm/[email protected]/dist/js/bootstrap.bundle.min.js" integrity="sha384-YvpcrYf0tY3lHB60NNkmXc5s9fDVZLESaAA55NDzOxhy9GkcIdslK1eN7N6jIeHz" crossorigin="anonymous"></script>
    </body>
</html>
Share Improve this question asked Feb 15 at 23:07 Eduardo TapiaEduardo Tapia 411 silver badge8 bronze badges
Add a comment  | 

1 Answer 1

Reset to default 0

The documentation shows a specific example of how you can define other named slots from your layout, to be populated from your Livewire component.

In your layout, you have {{ $navActive }}, which means that you can define your view like this, where you name a slot from your component with the name of the slot in the layout you are referencing. The content inside the slot will be rendered in the layout.

<x-slot name="navActive">
    Content from component: {{ $navActive }}
</x-slot>

<div class="row align-items-center">
    @include('partials.mostrar-filas',['var' => 'numberRows'])
    
    @include('partials.barra-busqueda', ['var' => 'search'])
    
    @include('partials.show-active', ['model' => 'model_active', 'text' => 'Ocultar inactivos'])
</div>

本文标签: laravel livewirelivewire3 how to pass a public variable from the component to the layoutStack Overflow