- Mar 2023
-
-
php artisan event:generate
两种方法, 第一种,先在EventServiceProvider中把键值对配好,用 php artisan event:generate统一生成; 第二种,分别用artisan去生成event和listener,再去写键值对。
-
- Dec 2022
-
laravel-livewire.com laravel-livewire.com
-
wire:model="message"
数据绑定,前端alpine使用x-model
-
Properties
- 属性重置
-
-
laravel-livewire.com laravel-livewire.com
-
public Post $post;
路由模型绑定,简化mount的写法。 Route::get('/post/{post}', ShowPost::class);
-
Livewire attempts to mimic this behavior through its mount method
Livewire 组件中的 mount 方法在其参数方面就像控制器方法一样。
-
Rendering Components
- 布局
- 路由参数,mount()模拟控制器接收路由参数
-
-
alpinejs.dev alpinejs.dev
-
As you can see, x-id accepts an array of ID names. Now any usages of $id() within that scope, will all use the same ID. Think of them as "id groups".
x-id接收一个数组,该作用域下的所有$id会产生相同的id值,可以把x-id理解成一个id group
-
-
alpinejs.dev alpinejs.dev
-
Example:
派发公共事件时应该必须要注意的事情
-
-
alpinejs.dev alpinejs.dev
-
Because of this difference in behavior, x-if should not be applied directly to the element, but instead to a <template> tag that encloses the element. This way, Alpine can keep a record of the element once it's removed from the page.
一般使用在template上,不支持x-transition
-
-
alpinejs.dev alpinejs.dev
-
<template x-teleport="body" @click="open = false"> <div x-show="open"> Modal contents... (click to close) </div> </template>
这部分点击后会被传送走,传送到x-data以外,脱离了alpine的实际控制区,但是点击外部的dom,还是会执行关闭动作。 首先,它阻止了x-data内组件的冒泡。 其次,它创建了一个事件的副本,并重新进行了派发。
-
-
alpinejs.dev alpinejs.dev
-
addresses this scenario
解决此方案
-
-
alpinejs.dev alpinejs.dev
-
<div x-data="{ label: 'Hello' }" x-effect="console.log(label)"> <button @click="label += ' World!'">Change Message</button></div>
监视器,组件属性值发生变化时运行。 1. 组件载入时运行一次; 2. 组件值发生变化时运行一次。
-
-
alpinejs.dev alpinejs.dev
-
.lazy
离开时才检测
-
x-model
two-way bound,双向绑定
-
-
alpinejs.dev alpinejs.dev
-
<div @scroll.window.throttle="handleScroll">...</div>
节流阀,laravel的登录页常常需要这个功能,防止恶意登录尝试,在限定的时间内,只能执行一次
-
debounce
livewire也有这个debounce
-
<div x-data @foo="alert('Button Was Clicked!')"> <button @click="$dispatch('foo')">...</button></div>
对于自定义事件,必须加上@click="$dispatch('foo')"
-
x-on
x-on是绑定事件的,比如click,x-bind是绑定属性的(或者绑定一切?),比如placeholder
-
-
alpinejs.dev alpinejs.dev
-
<div :class="{ 'hidden': ! show }">
class的存在与否,取决于布尔值
-
<div x-data="{ placeholder: 'Type here...' }"> <input type="text" x-bind:placeholder="placeholder"></div>
设置placeholder
<div x-data="{ placeholder: 'Type here...' }"> <input type="text" x-bind:placeholder="placeholder"> </div>
-
-
alpinejs.dev alpinejs.dev
-
processed
pro+cess=往前走
-
-
alpinejs.dev alpinejs.dev
-
Re-usable Data
数据复用
-
<div x-show="isOpen">
诚如上面所说,isOpen是一个get,运行isOpen就会显示isOpen中的值,仅此而已。 上面也说了,可以不加()
-
JavaScript getters are handy when the sole purpose of a method is to return data based on other state.
有点类似mysql的view。 1. 当运行get方法时就是get方法‘ 2. 当为set方法赋值时,会运行set方法 https://www.jianshu.com/p/58778e4d96d1
-
-
alpinejs.dev alpinejs.dev
-
Sometimes you may want to access the native browser event object inside your own code. To make this easy, Alpine automatically injects an $event magic variable:
$event绑定本机浏览器事件对象 <button @click="$event.target.remove()">Remove Me</button>
-
-
alpinejs.dev alpinejs.dev
-
<button x-data="{ label: 'Click Here' }" x-text="label"></button>
x-data可以和其他指令在同一节点上显示,外面不用再包div
-
-
alpinejs.dev alpinejs.dev
-
more fine-grained control over the transitions
对transitions实行更加细粒度的控制
-
x-if
x-if与x-show的不同: 1. 彻底remove; 2. 只能用在templete上
-
:class="{ 'hidden': ! open }"
class类的存在与否取决于一个js变量,这是常常需要的功能,这里就有了x-bind的语法糖
<div x-data="{ open: true }"> <span :class="{ 'hidden': ! open }">...</span> </div>
-