将字符串而不是变量传递给刀片文件中的子 Livewire 组件

Posted

技术标签:

【中文标题】将字符串而不是变量传递给刀片文件中的子 Livewire 组件【英文标题】:Passing strings instead of variables to child Livewire components in blade files 【发布时间】:2021-09-16 18:25:44 【问题描述】:

我是 Livewire 新手,我了解如何轻松地将变量传递给刀片文件中的 livewire 组件。下面的代码就是这样做的。

@php
    $CAR_MAKE = "carMake";
    $main_classes = "text-sm md:text-lg border-2";
    $placeholder = "Search";
@endphp    
<div class="flex mb-4 md:mb-9">
    <livewire:components.select :classes="$main_classes" :name="$CAR_MAKE" :placeholder="$placeholder" />  
</div>

但它需要首先在 PHP 标记中创建变量,然后我可以将变量传递给“select”livewire 组件。但它是硬编码数据,我想直接传递数据而不创建变量。这将有助于删除大量额外的 PHP 标记并提高代码质量。那么有没有办法做到这一点?或者我可以做些什么来改善这一点?

我希望得到类似下面的东西(没有变量声明):

<div class="flex mb-4 md:mb-9">
    <livewire:components.select :classes="text-sm md:text-lg border-2" :name="carMake" :placeholder="Search" />  
</div>

【问题讨论】:

【参考方案1】:

将数据传递给组件时,有一个微小的区别将决定所传递的内容是应该被解析为 PHP 还是应该按原样传递。

去掉前面的冒号:,传递的内容将不再被解析为PHP。

<livewire:components.select classes="text-sm md:text-lg border-2" name="carMake" placeholder="Search" />

这也意味着您可以通过在上面的字符串周围加上单引号将字符串传递给 PHP。这在这里不太有意义,因为在这种特殊情况下您根本不需要将其视为 PHP,但它演示了如何在传递的参数中使用 PHP 表达式。

这两种方法可以混合在一个组件中,就像我在这里展示的那样 - 占位符使用 null-coalescing 运算符发送变量,但如果该变量是null,它将默认为“搜索",而其他参数只是普通字符串。注意 'Search' 周围的单引号,使其成为字符串。

<livewire:components.select classes="text-sm md:text-lg border-2" name="carMake" :placeholder="$searchPlaceholder ?? 'Search'" />

【讨论】:

以上是关于将字符串而不是变量传递给刀片文件中的子 Livewire 组件的主要内容,如果未能解决你的问题,请参考以下文章

我可以将字符串变量传递给 jq 而不是文件吗?

将刀片文件中的数据直接传递给 Vue 实例

无法将 Laravel 刀片文件中的道具传递给 Vue 组件

将 shell 转义的参数字符串传递给 Bourne shell 中的子命令

如何从 Laravel5 中的刀片模板传递扩展主模板中的变量?

将变量传递给 Vue.js 中的子组件