Laravel 7 - 没有视图的组件

问题描述 投票:0回答:1

我想创建一个只提供数据不提供视图的Component。

例如,我想创建一个只提供数据而没有视图的组件。

<x:wg.items.listing :items="$items->items()" :filter="$obj->settings['filter']">
    @foreach($items as $item)
        {{ $item->title }}
    @endforeach     
</x:wg.items.listing>

刀片组件得到一个集合 :items 和a :filter.标签之间应该有一个可过滤的集合。

Listing.php。

class Listing extends Component
{

    public $items;
    public $filter;

    /**
     * Create a new component instance.
     *
     * @return void
     */
    public function __construct($filter="0", $items="0")
    {
        $this->filter = $filter;
        $this->items = $items;
    }

    /**
     * Get the view / contents that represent the component.
     *
     * @return \Illuminate\View\View|string
     */
    public function render()
    {
        $this->items = app()->make("App\\Http\\Controllers\\Frontend\\BlogController")->generateList($this->items, $this->filter);

        /*return view('components.wg.items.list');*/

    }
}

列表.php: The Listing.php 不应该呈现一个视图,因为项目集合也是如此,只能在 components.wg.items.list 而不是上面的Blade x标签之间。

这可能吗?先谢谢你!

php laravel components laravel-blade laravel-7
1个回答
0
投票

你不能这样做,你在组件中声明的每个变量都只能在组件本身中使用。

... 除非你想用 真的 肮脏的方式。然后你可以使用全局变量。

<x:wg.items.listing :items="$items->items()" :filter="$obj->settings['filter']">
    @php
        global $filtered_items;
    @endphp
    @foreach($filtered_items as $item)
        {{ $item->title }}
    @endforeach     
</x:wg.items.listing>
    public function render()
    {
        global $filtered_items;
        $filtered_items = app()->make("App\\Http\\Controllers\\Frontend\\BlogController")->generateList($this->items, $this->filter);

        return "{{ $slot }}";

    }

P.S: 顺便说一下,你不应该把过滤逻辑放在控制器里面。模型应该对它负责。

© www.soinside.com 2019 - 2024. All rights reserved.