猿问

Laravel 7 - 没有视图的组件

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


例如:


<x:wg.items.listing :items="$items->items()" :filter="$obj->settings['filter']">

    @foreach($items as $item)

        {{ $item->title }}

    @endforeach     

</x:wg.items.listing>

Blade 组件获取一个集合:items和一个:filter. 标签之间应该有一个可用的过滤集合。


清单.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');*/


    }

}

不Listing.php应该呈现视图,因为项目集合仅在上面的 Blade x 标签中可用components.wg.items.list,而不在它们之间可用。


这可能吗?先感谢您!


ibeautiful
浏览 95回答 1
1回答

达令说

你不能做这样的事;您在组件中声明的每个变量仅在组件本身中可用。... 除非您想以真正肮脏的方式来做。然后你可以使用全局变量:<x:wg.items.listing :items="$items->items()" :filter="$obj->settings['filter']">&nbsp; &nbsp; @php&nbsp; &nbsp; &nbsp; &nbsp; global $filtered_items;&nbsp; &nbsp; @endphp&nbsp; &nbsp; @foreach($filtered_items as $item)&nbsp; &nbsp; &nbsp; &nbsp; {{ $item->title }}&nbsp; &nbsp; @endforeach&nbsp; &nbsp; &nbsp;</x:wg.items.listing>&nbsp; &nbsp; public function render()&nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; global $filtered_items;&nbsp; &nbsp; &nbsp; &nbsp; $filtered_items = app()->make("App\\Http\\Controllers\\Frontend\\BlogController")->generateList($this->items, $this->filter);&nbsp; &nbsp; &nbsp; &nbsp; return "{{ $slot }}";&nbsp; &nbsp; }PS:顺便说一句,你不应该把你的过滤逻辑放在你的控制器里。模型应该对此负责。
随时随地看视频慕课网APP
我要回答