$ATTRIBUTES->合并:我做错了什么 [英] $attributes->merge : what am i doing wrong

查看:0
本文介绍了$ATTRIBUTES->合并:我做错了什么的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在LALAVELL中有以下刀片组件。我在用顺风。位于 Views/components/indigo-button-sm.blade.php

<button {{ $attributes->merge(['type' => 'button', 'class' => 'inline-flex justify-center py-1 px-1 border border-transparent shadow-sm text-sm font-medium rounded-md text-white bg-indigo-600 hover:bg-indigo-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-indigo-500']) }}>
    {{ $slot }}
</button>

我希望能够动态地更改组件。也就是说,我使用上面的组件显示一个&SAVE&QOOT;按钮。但是,我想要显示一个按钮,该按钮显示"确认您的输入",并稍微更改按钮的外观,以直观地提示这是另一个选项。

具体地说,我有一个自动完成,用户正在输入一个项目,我提供了超过2,000个选择(学校)。但是,如果用户输入的学校不在我的数据库表列表中,我希望他们确认他们输入的学校是正确的,因此我想显示您的输入确认按钮,以便确认。如果他们选择的学校已在列表中,我不会要求他们确认他们的键入。

因此,我想更改保存按钮

bg-indigo-600 hover:bg-indigo-700

到"确认"按钮,配色方案略有不同。

bg-indigo-800 hover:bg-indigo-900

<x-indigo-button-sm x-show="showsaveschool" wire:click="saveSchoolInfo">Save</x-indigo-button-sm>
<x-indigo-button-sm x-show="showconfirmschool" wire:click="confirmSaveSchoolInfo">Confirm</x-indigo-button-sm>

所以他们输入学校,而学校不在查找列表中。他们点击保存按钮。保存按钮消失,确认按钮显示,并且确认按钮正下方将显示一段文本。

在我键入此内容时,我开始觉得只创建一个确认按钮并始终使用它会更好。

无论如何。我认为$Attributes(Merge[‘’])将允许您更改属性,但我认为它只允许您添加属性。因此,如果您有一个边际类,比如组件中的&Q;MY-0&Q;,它似乎不允许有一个新的类似类,如&Q;MY-5&Q;

您的评论将受到欢迎。

推荐答案

对于class属性,您可以使用conditional merging来确保仅在尚未设置冲突的属性时才插入该属性。

<button
    {{ $attributes->merge([
        'type' => 'button',
        'class' => [
            'inline-flex justify-center py-1 px-1',
            'border border-transparent shadow-sm',
            'text-sm font-medium rounded-md text-white',
            'focus:outline-none focus:ring-2',
            'focus:ring-offset-2 focus:ring-indigo-500'
            'bg-indigo-600 hover:bg-indigo-700' => hasCustomBackground(),
        ]
    )}}
>
    {{ $slot }}
</button>
在刀片模板中,如果布尔值为真,则插入非数字数组键。因此,在本例中,基于传递的类值创建一个hasCustomBackground()component method

class IndigoButtonSm extends Component
{
    public string class;

    public function hasCustomBackground(): bool
    {
        $classes = collect(explode(" ", $this->class));
        return $classes->contains(fn ($c) => str_contains("bg-indigo", $c));
    }

    ...
}

我以前从未使用过此功能,但根据文档,它应该可以工作吗?

这篇关于$ATTRIBUTES-&gt;合并:我做错了什么的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆