livewire 와 alpine 바인딩 비교
1// livewire2<h1>{{ $message }}</h1>3<input type="text" wire:model='message'>4 5// alpine6<div x-data="{message:''}">7 <h1 x-text="message"></h1>8 <input type="text" x-model="message">9</div>
alping.js 에서 model binding
1<div x-data="{ message:'메시지 입니다.' }">2 <h2 x-text="message"></h2>3 <input type="text" x-model="message">4</div>
livewire 에서 model binding view 파일
1namespace App\Http\Livewire\Test; 2 3use Livewire\Component; 4 5class Input extends Component 6{ 7 public $message; 8 9 public function render()10 {11 return view('livewire.test.input');12 }13}
# Livewire Component 추가하기
1<livewire:test.input message="메시지 입니다." />
# livewire View에서 property 출력
1<h2>{{ $message }}</h2>
# livewire model binding
1<input type="text" wire:model="message"><br>
# laravel component 추가시 속성설정
1<x-test.input wire:model.defer="message" wire:loading.class="opacity-25" />
# laravel component 에서
1<input type="text" {{ $attributes }} /> 2 3<input type="text" {{ $attributes->wire('model') }}> 4 5<input type="text" wire:model='message'> 6 7<div class="border p-4"> 8 9 <h4>{{ $attributes }}</h4>10 <h4>{{ $attributes->wire('model')->value()}}</h4>11 <h4>{{ $attributes->wire('model')->modifiers()}}</h4>12 <h4>{{ $attributes->wire('model')->hasModifier('defer') }}</h4>13 14 <h4>{{ $attributes->wire('loading')->value()}}</h4>15 <h4>{{ $attributes->wire('loading')->hasModifier('class') }}16 </h4>17 18</div>
$attributes : wire:model.defer="message" wire:loading.class="opacity-25"
$attributes->wire('model')->value() : message
$attributes->wire('model')->modifiers() : ["defer"]
$attributes->wire('model')->hasModifier('defer') : 1
$attributes->wire('loading')->value() : opacity-25
$attributes->wire('loading')->hasModifier('class') : 1
livewire 와 laravel component 와 alpine.js 에서 모두 바인딩 시키기
1use Livewire\Component; 2 3class Dropdown extends Component 4{ 5 public $show = false; 6 7 public function toggle() 8 { 9 $this->show = !$this->show;10 }11 public function render()12 {13 return view('livewire.test.dropdown');14 }15}
1<div> 2 <x-test.dropdown wire:model="show"> 3 <x-slot name="trigger"> 4 <button>Show</button> 5 </x-slot> 6 test 7 </x-test.dropdown> 8 9 <button wire:click='toggle'>Show</button>10</div>
1<div x-data="{open : @entangle($attributes->wire('model'))}">2 <div @click="open = true">3 {{ $trigger }}4 </div>5 6 <div x-show="open" @click.outside="open = false">7 {{ $slot }}8 </div>9</div>
test