LaravelLivewire如何使用
这篇文章主要讲解了“Laravel Livewire如何使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Laravel Livewire如何使用”吧!
为上高等地区用户提供了全套网页设计制作服务,及上高网站建设行业解决方案。主营业务为成都做网站、网站制作、上高网站设计,以传统方式定制建设网站,并提供域名空间备案等一条龙服务,秉承以专业、用心的态度为用户提供真诚的服务。我们深信只要达到每一位用户的要求,就会得到认可,从而选择与我们长期合作。这样,我们也可以走得更远!
Laravel Livewire是一个很好的工具,可以在页面上实现动态行为,无需直接编写 JavaScript 代码。而且,像任何工具一样,它有很多「隐藏的宝石」,包括官方文档和开发者提供的实用额外提示。
1. 不需要render()
典型的render()
方法看起来像这样:
// app/Http/Livewire/PostsShow.php
class PostsShow extends Component
{
public function render()
{
return view('livewire.posts-show');
}
}
但是,如果你的render()
方法只是一个单行来呈现 默认视图,您可以从组件中删除该render()
方法,它仍然可以工作,从供应商的方法加载默认为render()
。【相关推荐:laravel视频教程】
class PostsShow extends Component
{
//这个空组件仍将工作并加载Blade文件
}
2. 子文件夹中的组件
如果你想在子文件夹中生成一个组件,比如app/Http/Livewire/Folder/Component.php
,你有两种方法:
php artisan make:livewire Folder/Component
或者
php artisan make:livewire folder.component
请注意,第一种方式是第一个字母大写,第二种方式是小写。在这两种情况下,都会生成两个文件:
app/Http/Livewire/Folder/Component.php
resources/views/livewire/folder/component.blade.php
如果子文件夹不存在,将自动创建它们。
3.非默认文件夹中的组件
如果您将某些外部包与 Livewire 组件一起使用,则您的 Livewire 组件可能位于与默认的 app/Http/Livewire
不同的文件夹中。您可能需要将其名称绑定到实际位置。
通常可以在app/Providers/AppServiceProvider.php
(或任何服务提供者)方法boot()
中完成:
class AppServiceProvider extends ServiceProvider
{
public function boot()
{
Livewire::component('shopping-cart', \Modules\Shop\Http\Livewire\Cart::class);
}
}
4.轻松重命名或移动组件
如果您在使用 make:livewire
生成组件时打错字,请不要担心。您不需要手动重命名两个文件,有一个命令供我们使用。
例如,如果您编写了php artisan make:livewire Prduct
,但您想要「Product」,并且还决定将其放入子文件夹中,则可以使用以下命令进行改进:
php artisan livewire:move Prduct Products/Show
结果将是这样的:
COMPONENT MOVED
CLASS: app/Http/Livewire/Prduct.php
=> app/Http/Livewire/Products/Show.php
VIEW: resources/views/livewire/prduct.blade.php
=> resources/views/livewire/products/show.blade.php
5.更改默认组件模板
Livewire 组件是使用默认模板生成的,即所谓的「存根」。它们隐藏在 Livewire 包的「vendor」文件夹中,但您也可以根据需要发布和编辑它们。
Run this command:
php artisan livewire:stubs
您会找到一个新文件夹 /stubs
,其中包含一些文件。stubs/livewire.stub
的示例:
例如,如果您想生成不使用
render()
方法的组件,只需将其从存根文件中删除,然后每次运行php artisan make:livewire Component
,它都会从您更新的模板中获取「公共存根」。6. 不要为了设置值而创建方法
如果您有一个会设置某个属性的某个值的Click事件,您可以这样:
然后
class Show extends Component { public $showText = false; public function showText() { $this->showText = true; } }
但实际上,您可以直接从vender文件为Livewire属性赋一个新值,而不需要在Livewire组件中有单独的方法。
以下是代码:
因此,如果您的属性是一个布尔变量,并且希望有一个显示/FALSE按钮,则您需要调用
$set
并提供两个参数:您的属性名称和新值。7. 更进一步:轻松设置 true/false
在上一个技巧之后,如果您的属性是一个带有true/false的布尔变量,并且您想要有一个显示/隐藏按钮,您可以这样:
注意:我个人会避免使用 Livewire 来实现这种简单的切换效果,因为它会向服务器添加额外的请求。
相反,最好使用 JavaScript,例如 Alpine.js:
8. 最小化服务器请求的三种方法
Livewire 的主要诟病之一是它对服务器的请求太多。如果您在输入字段中有wire:model
,则每次击键都可能会调用服务器以重新渲染组件。如果您有一些实时效果,例如「实时搜索」,那将非常方便。但通常,就性能而言,服务器请求可能非常昂贵。
但是,自定义 wire:model
的这种行为非常容易。
wire:model.debounce
:默认情况下,Livewire 在输入按键后等待 150 毫秒,然后再向服务器执行请求。 但您可以覆盖它:wire:model.lazy
:默认情况下,Livewire 会监听输入上的所有**事件,然后执行服务器请求。 通过提供lazy
指令,您可以告诉 Livewire 仅监听change
事件。 这意味着用户可以继续输入和更改,并且只有当用户点击离开该字段时才会触发服务器请求。wire:model.defer
:这不会在输入更改时触发服务器请求。 它将在内部保存新值并将其传递给下一个网络请求,该请求可能来自其他输入字段或其他按钮的点击。
9.自定义验证属性
Livewire 验证的工作方式与 Laravel 验证引擎非常相似,但有一些不同之处。在 Laravel 中,如果你想自定义属性的名称,你可以定义 attributes()
方法 在表单请求类中。
在 Livewire 中,方法不同。 在组件中,您需要定义一个名为「$validationAttributes」的属性并在那里分配键值数组:
class ContactForm extends Component
{
protected $validationAttributes = [
'email' => 'email address'
];
// ...
}
这对于常见的错误消息很有用,例如「需要字段 XYZ」。默认情况下,该 XYZ 被替换为字段名称,用户可能不会理解这个的词,因此应该将其替换为更清晰的错误消息。
10. 加载提示
从我所见,官方文档中描述但很少使用的东西。如果某些动作在屏幕上需要一段时间,则应该显示一些加载指示符,例如旋转的 gif,或者只是「正在加载数据…」的文本
在 Livewire 中,它不仅易于实现,而且还易于定制。
处理数据的最简单示例:当服务器发出请求时,它将显示「正在处理付款…」文本,直到服务器请求完成并返回结果。
在实践中,我喜欢仅在需要一段时间时才显示此类加载指示器。在所有可能的情况下,每次都重新渲染 DOM 是没有意义的。 如果我们只在请求时间超过 500 毫秒时才这样做呢?
这很简单:
...