Рендеринг только один раз сегмент или частично в лезвии - PullRequest
0 голосов
/ 21 июня 2019

Я пытаюсь создать полные компоненты блейда, которые содержат необходимые ему зависимости VueJ

Пример

views / shared / _manage-user-button.blade.php

<button 
   @click.prevent="$modal.show('manage-user-modal', {
        url: '{{ route('users.update', $user) }}'
    })"
>
    Manage {{ $user->name }}
</button>


<manage-user-modal>
</manage-user-modal>

Но каждый раз, когда я буду повторно вызывать этот компонент, <manage-user-modal> будет перерисовываться.

Решение состояло бы в том, чтобы переместить <manage-user-modal> в родительском или глобальном масштабе, но это нарушило бы идею создания частичной независимости.

Начало решения

@if(!isset($loop) ?: $loop->last)
    <manage-user-modal>
    </manage-user-modal>
@endif

При этом он работает как шарм НО , когда компонент вызывается в двух разных циклах / местах на одной и той же странице, он все равно будет отображаться дважды.

Я также попробовал "хакерский" способ

@if(config('manage-user-button-rendered')? false : config(['manage-user-button-rendered' => true]) )
    <manage-user-modal>
    </manage-user-modal>
@endif

Но, похоже, он не работает с видом

Ответы [ 2 ]

0 голосов
/ 21 июня 2019

Я бы определил модально глобально:

index.blade

<manage-user-modal>
    </manage-user-modal>

И чтобы сохранить независимость частичек, передайте им имя модальной переменной:

index.blade

@include('partial',['user_modal' => 'manage-user-modal']) 

partial.blade

<button 
   @click.prevent="$modal.show($user_modal, {
        url: '{{ route('users.update', $user) }}'
    })"
>
    Manage {{ $user->name }}
</button>
0 голосов
/ 21 июня 2019

Извините, это была глупая ошибка ...

config(['manage-user-button-rendered' => true] возвращает null Поэтому я добавил ! к доходам true

[править]
Самый оптимальный способ, который я нашел, это использовать define, и я связал его с пользовательской директивой blade-сервера.

Blade::if('renderOnce', function ($key) {
            return defined($key)? false : define($key, true);
        });

А потом

@renderOnce('manage-user-modal')
    <manage-user-modal>
    </manage-user-modal>
@endrenderOnce

Я все еще открыт для лучшего и менее хакерского решения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...