我正在使用Laravel v10,在我的项目中,我尝试了以下方法来使用livewire制作自定义组件。
我跑了:php artisan make:component CounterDisplay
创建了一个新文件,名为:resources/views/components/counter-display.blade.php
是这样的:
<div>
Counter Value: {{ $count }}
</div>
然后运行php artisan make:livewire Counter
创建一个新的livewire组件(app/Http/Livewire/Counter.php
):
// app/Livewire/Counter.php
namespace App\Livewire;
use Livewire\Component;
class Counter extends Component
{
public $count = 0;
public function increment()
{
$this->count++;
}
public function render()
{
return view('livewire.counter');
}
}
然后创建一个新的刀片文件resources/views/livewire/counter.blade.php
:
<!-- resources/views/livewire/counter.blade.php -->
<div>
<button wire:click="increment">Increment</button>
<x-counter-display :count="$count" />
</div>
通过这条路线:
use App\Livewire\Counter;
Route::get('/counter', function () {
return view('counter', ['counter' => Counter::class]);
});
并创建了一个名为counter.blade.php
的刀片文件:
<!-- resources/views/counter.blade.php -->
@extends('layouts.app')
@section('content')
<livewire:counter />
@endsection
现在当我访问**/counter
**时,什么都没有显示!
但是,当我在counter-display.blade.php
上检查dd
时,:
@dd(2) <!-- Properly returns 2 but the html not show up -->
<div>
Counter Value: {{ $count }}
</div>
它将显示输出,但奇怪的是,即使**计数器值:**文本没有打印,而没有错误。
所以如果你知道这是怎么回事,请告诉我...
我真的被这个卡住了!
2条答案
按热度按时间bqujaahr1#
您可以将刀片上的livewire组件称为
kb5ga3dv2#
您已使用以下方式生成 CounterDisplay:
php artisan make:component CounterDisplay
所以我假设您同时拥有 counter-display.blade.php 和 /View/Components/CounterDisplay.php
要让$counter到达 counter-display.blade.php,必须在 CounterDisplay.php 的构造函数中管理它:
或者如果你更喜欢“经典”的方式:
否则,您可以删除 /View/Components/CounterDisplay.php,并直接在 counter-display.blade.php 视图中声明$count属性:
完成这些修改后,建议运行:
composer 转储自动加载
php artisan view:clear