我想创建一个只提供数据不提供视图的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标签之间。
这可能吗?先谢谢你!
你不能这样做,你在组件中声明的每个变量都只能在组件本身中使用。
... 除非你想用 真的 肮脏的方式。然后你可以使用全局变量。
<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: 顺便说一下,你不应该把过滤逻辑放在控制器里面。模型应该对它负责。