$attributes->merge : 我做错了什么
$attributes->merge : what am i doing wrong
我在 laravel 中有以下 blade 组件。我正在使用顺风。位于
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>
我希望能够即时更改组件。也就是说,我使用上面的组件来显示一个“保存”按钮。但随后我想显示一个按钮,上面写着“确认”您的输入,并稍微更改按钮的外观,以在视觉上暗示这是一个不同的选择。
具体来说,我有一个自动完成功能,用户正在输入我提供超过 2,000 个选择(学校)的项目。但是如果用户输入的学校不在我的数据库 table 列表中,我希望他们确认他们输入的学校是正确的,所以我想显示“确认”你的输入按钮,只是为了当然。如果他们选择的学校已经在列表中,我不会要求他们确认输入。
所以,我想更改保存按钮
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['']) 将允许您更改属性,但我认为它只允许您添加属性。因此,如果您有边距 class,在组件中说“my-0”,它似乎不允许新的类似 class,例如“my-5”
我们将不胜感激您的意见。
对于 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>
在 blade 模板中,如果布尔值为真,则插入 non-numeric 数组键。所以在这种情况下,根据传递的 class 值创建一个 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));
}
...
}
我以前从未使用过此功能,但根据文档,它应该有效吗?
我在 laravel 中有以下 blade 组件。我正在使用顺风。位于 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>
我希望能够即时更改组件。也就是说,我使用上面的组件来显示一个“保存”按钮。但随后我想显示一个按钮,上面写着“确认”您的输入,并稍微更改按钮的外观,以在视觉上暗示这是一个不同的选择。
具体来说,我有一个自动完成功能,用户正在输入我提供超过 2,000 个选择(学校)的项目。但是如果用户输入的学校不在我的数据库 table 列表中,我希望他们确认他们输入的学校是正确的,所以我想显示“确认”你的输入按钮,只是为了当然。如果他们选择的学校已经在列表中,我不会要求他们确认输入。
所以,我想更改保存按钮
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['']) 将允许您更改属性,但我认为它只允许您添加属性。因此,如果您有边距 class,在组件中说“my-0”,它似乎不允许新的类似 class,例如“my-5”
我们将不胜感激您的意见。
对于 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>
在 blade 模板中,如果布尔值为真,则插入 non-numeric 数组键。所以在这种情况下,根据传递的 class 值创建一个 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));
}
...
}
我以前从未使用过此功能,但根据文档,它应该有效吗?