在Laravel Filament我想增加或减少重复项目的数量改变值count InputText. live()方法在这种情况下是不react 的.

TextInput::make('count')->numeric()->live()->default(3),
Repeater::make('installments')
->schema([
    TextInput::make('amount')->numeric()->placeholder('Installment Amount')->hiddenLabel(),
    TextInput::make('interval')->numeric()->placeholder('Interval')->hiddenLabel(),
    Select::make('interval_unit')->hiddenLabel()->placeholder('Interval Unit'),
])
->defaultItems(function (Get $get) {
     return $get('count');
  })
  ->hiddenLabel()->deletable(false)
  ->addable(false)->columnSpan(3)->reorderable(false)->columns(3)

在初始加载中,它显示3个项目,默认值count是3,但更改文本输入字段中的值count不会改变重复器项目的数量.

如何使此中继器项目动态化?

推荐答案

我会这样做:

TextInput::make('count')
    ->numeric()
    ->live()
    ->default(3)
    ->minValue(0)
    ->afterStateUpdated(function (Set $set, Get $get, ?int $state, ?int $old): void {
        if (is_null($state)) {
            $set('installments', []);
            return;
        }

        $installments = $get('installments');
        $itemsToBeAdded = $state - $old;

        if ($itemsToBeAdded > 0) {
            for ($i = 0; $i < $itemsToBeAdded; $i++) {
                $installments[] = [];
            }
        } else if ($itemsToBeAdded < 0) {
            for ($i = 0; $i < abs($itemsToBeAdded); $i++) {
                array_pop($installments);
            }
        }

        $set('installments', $installments);
    }),
Repeater::make('installments')
    ->schema([
        TextInput::make('amount')->numeric()->placeholder('Installment Amount')->hiddenLabel(),
        TextInput::make('interval')->numeric()->placeholder('Interval')->hiddenLabel(),
        Select::make('interval_unit')->hiddenLabel()->placeholder('Interval Unit'),
    ])
    ->defaultItems(function (Get $get) {
        return $get('count');
    })
    ->hiddenLabel()
    ->deletable(false)
    ->addable(false)
    ->columnSpan(3)
    ->reorderable(false)
    ->columns(3),

我改变了什么?

  • 我添加了afterStateUpdated函数,在这里我检索countinstallments的当前状态(使用$get),并计算是否需要添加或删除一个项目(使用$set).
  • 最后但并非最不重要的是,不要通过链接->minValue(0)行来使countminValue小于0.

Docs:

Laravel相关问答推荐

Laravel带S3存储器

Laravel 联合和分页

Ziggy 路由默认为查询字符串

laravel 如何验证跨越午夜的两个值之间的时间(15:00 > 时间 > 01:00)

如何通过 Controller 访问 Laravel 中 Model 的值?

Laravel Blade:@stop VS @show VS @endsection VS @append

Laravel 保存一对多关系

Laravel 4:处理种子中的关系

Laravel 5 - ErrorException 无法打开流:权限被拒绝

Laravel 5.x 中 onUpdate / onDelete 的可用操作

如何在同一行显示 Laravel artisan 命令输出?

如何在 Laravel 中创建类别的嵌套列表?

Http请求多浏览器的烦恼

Laravel 存储文件的公共 url

在 Laravel 5 中找不到类App\Http\Controllers\Artisan

安装后在 Lumen 中找不到页面

Laravel php artisan 服务于模仿 HTTPS

在 Laravel 中包含 bootstrap 程序

Laravel - artisan不工作

Laravel如何仅响应没有正文消息的204代码状态