Day 07 | 互动事件

互动事件顾名思义,就是前後端之间的互动啦!现在要从页面上触发後端的 Function 不用在自己写 JavaScript 然後用 AJAX 去帮你触发啦,也不用为了一个功能多写一只 Route。透过 Livewire 直接无痛呼叫写在 Livewire 内的 function,用起来体感满分!!

范例

今天就使用简单的计数器来当范例,每当按下按钮就会让值加1:

class Day7 extends Component
{
    public $count = 0;

    public function addCount()
    {
      $this->count++;
    }
    ...
<div>
    <h2>{{ $count }}</h2>
    <button wire:click="addCount">+</button>
</div>

非常简单的就完成了与後端的互动!!

注意:每次互动都会使页面重新渲染

其他互动事件

事件 语法
点击 wire:click
按键 wire:keydown
送出 wire:submit

或是一些页面元件有支援的事件,例如 wire:change

范例:

<input wire:keydown.enter="addCount">
<form wire:submit.prevent="save">
    ...
    <button>Save</button>
</form>

传递参数

当然要传递参数也是能够轻松做的:

public function setCount($value)
{
    $this->count = $value;
}
<button wire:click="setCount(100)">设为100</button>

魔术方法

Livewire 也提供了一些方法,好让你更轻松的去操作。

Function 功能
$refresh 重新渲染页面,注意:并不是将页面重置的意思
$set('property', value) 可以直接改这个变数的值
$toggle('property') 同上,但是是改 Boolean 的值
$emit('event', ...params) 触发全域事件,後面章节会介绍
$event 能保存事件的特殊变数,像是wire:change="setSomeProperty($event.target.value)",跟 Vue 在触发事件时拿到的类似,会拿到 DOM 发生的事件,详见 MDN 文件 - Event

这里就使用最常用到的 $set 来做范例,直接将计数器设为 999。

 <button wire:click="$set('count', 999)">999</button>

范例 & 练习

GitHub 网址在这边

运行之後打开 http://127.0.0.1:8000/day7 就能看到今天的范例啦!

档案的话分别在:
app\Http\Livewire\Example\Day7.php
resources\views\livewire\example\day7.balde.php

今天出了两个练习题:

  1. 练习:完成减1 以及 将值重置
  2. 进阶练习: 搭配 Input 让原本的值加上 Input 的值

<<:  [Day9] Flutter - 按钮元件 ( Button )

>>:  Day9 云端储存 - SAN

【Day 21】Algorithm - Find Cycle in Directed Graph

这题真的需要花一点功夫,题目并不难懂,但是不能用直观的方式去写,可以上网搜寻关键字「find cyc...

Day15 ATT&CK for ICS - Execution(2)

Change Operating Mode 攻击者修改 OT 设备的操作状态,为了要取得权限,PLC...

Day11:插入排序法(Insertion Sort)

谈谈插入排序(Insertion Sort) 在开始今天之前,先来看看影片(约2分钟)吧! http...

【图解演算法教学】【Tree】二元树遍历 vs LeetCode 501 找众数

Youtube连结:https://bit.ly/3m1VQWV 在我们了解Binary Tree...

【30】使用混合精度(Mixed precision) 对训练产生的影响

Colab连结 一般我们在做机器学习任务时,在模型里计算的资料型态采用的是 float32 (即占用...