如何在递归 Laravel 组件中实现循环索引?

how can I achieve loop indexing in recursive laravel components?

提问人:Khayam Khan 提问时间:11/13/2023 最后编辑:Khayam Khan 更新时间:11/13/2023 访问量:46

问:

我陷入了一个问题,尝试了很多方法,但都是徒劳的。 实际上,我想要的是在递归Laravel组件中实现增量索引。 例如,我希望索引是 0, 1, 2, 3, 4, 5, 6, 7, 8 ......等等。

我的代码是,

@foreach($costs as $cost)
   <x-estimation-item :cost="$cost" />
@endforeach

我的组件是,

@props([
    'cost',
])

<div>
    @foreach($cost->children as $child)
        <x-estimation-item :cost="$child" />
    @endforeach
</div>

我正在使用 Laravel 邻接列表包,我的级别高达 9 个级别。 现在,我只想在每次组件调用时增加值。 我将访问子项的 foreach 循环上方的增量值。 知道我该如何实现这一目标吗?

如果可能的话,任何想法或代码段!

LARAVEL LARAVEL-8 LARAVEL 刀片

评论


答:

1赞 Oluwafemi Sule 11/13/2023 #1

让你的组件接受一个反道具。EstimationItem

App\View\Components\EstimationItem

<?php

namespace App\View\Components;

use Illuminate\View\Component;

class EstimationItem extends Component
{
    public $cost;
    public $counter;

    public function __construct($cost, $counter) {
        $this->cost = $cost;
        $this->counter = $counter;
        $counter->increment();
    }
}

resources/views/components/estimation-item.blade.php

@props([
    'cost',
    'counter'
])

<div>
    @foreach($cost->children as $child)
        {{ $counter->getValue() }}
        <x-estimation-item :cost="$child" :counter="$counter" />
    @endforeach
</div>

声明一个类来容器索引,并在每次呈现组件时递增索引。Counter

App\Pojos\Counter

namespace App\Pojos;

final class Counter {
    private int index;

    public function __construct() {
        $this->index = 0;
    }

    public function increment() {
        $this->index++;
    }

    public function getValue(): int {
        return $this->index;
    }
}

初始化计数器并将其作为 prop 传递给您的组件。

@php
$counter = new \App\Pojo\Counter();
@endphp

@foreach($costs as $cost)
   {{ $counter->getValue() }}
   <x-estimation-item :cost="$cost" :counter="$counter" />
@endforeach

您可以在操场上看到这一点。