Метод updatingFoo
Метод updatingFoo является жизненным хуком в Livewire, который вызывается непосредственно перед изменением свойства компонента с именем Foo. Этот метод позволяет перехватить момент обновления конкретного свойства, выполнить валидацию, модифицировать новое значение или отменить изменение. Метод получает новое значение свойства и может его изменить перед применением.
Синтаксис
<?php
namespace AppLivewire;
use LivewireComponent;
class ExampleComponent extends Component
{
public $foo;
public function updatingFoo($value)
{
// Logic before updating $foo
}
}
?>
Пример
Давайте создадим компонент со свойством $num и будем перехватывать его изменение через метод updatingNum:
<?php
namespace AppLivewire;
use LivewireComponent;
class Counter extends Component
{
public $num = 0;
public function updatingNum($value)
{
$this->num = $value * 2;
}
public function inc()
{
$this->num++;
}
public function render()
{
return view('livewire.counter');
}
}
?>
<button wire:click="inc">
+
</button>
<span>{{ $num }}</span>
Результат выполнения кода после одного клика:
"num is 2"
Пример
Давайте добавим валидацию в метод updatingNum, чтобы предотвратить установку отрицательного значения:
<?php
namespace AppLivewire;
use LivewireComponent;
class Counter extends Component
{
public $num = 0;
public function updatingNum($value)
{
if ($value < 0) {
$this->num = 0;
return;
}
$this->num = $value;
}
public function setNum($value)
{
$this->num = $value;
}
public function render()
{
return view('livewire.counter');
}
}
?>
<button wire:click="setNum(-5)">
Set -5
</button>
<button wire:click="setNum(10)">
Set 10
</button>
<span>{{ $num }}</span>
Результат выполнения кода после клика на кнопку "Set -5":
"num is 0"
Пример
Метод updatingFoo также может принимать второй параметр для получения имени свойства:
<?php
namespace AppLivewire;
use LivewireComponent;
class Profile extends Component
{
public $name = '';
public $email = '';
public function updating($property, $value)
{
if ($property === 'email') {
$this->email = strtolower($value);
}
}
public function render()
{
return view('livewire.profile');
}
}
?>
<input type="text" wire:model="email" placeholder="Email">
<span>{{ $email }}</span>
Результат выполнения кода при вводе "TEST@MAIL.COM":
"test@mail.com"
Смотрите также
-
метод
updatedFoo,
который вызывается после изменения свойства -
метод
updating,
который вызывается перед изменением любого свойства -
метод
updated,
который вызывается после изменения любого свойства -
метод
mount,
который вызывается при инициализации компонента