如何解决从livewire中的发射发送集合显然发送其他信息
我有一个简单的下拉列表作为livewire组件(例如组件A):
<select wire:model="mould_id" wire:change="$emit('mouldSelected',mould_id)" class="form-control w-75 float-left">
@foreach( $moulds as $mould )
<option value="{{ $mould->id }}">{{ $mould->code }}</option>
@endforeach
</select>
该组件的类接收一个模具集合以显示选择内容,但是,当mouldsUpdated
被触发时,该列表也应被更新。此事件应与另一个组件中的模具列表一起触发。
<?PHP
namespace App\Http\Livewire\Orders;
use App\Models\Mould;
use Livewire\Component;
class OrderMouldSelect extends Component{
public $moulds = [];
public $mould_id = null;
protected $listeners = [
'mouldsUpdated' => 'setMoulds',];
/**
* Sets the component up
*
* @param $moulds
*/
public function mount( $moulds ){
$this->setMoulds( $moulds );
}
/**
* Sets the list of moulds for the dropdown menu
*
* @param $moulds
*/
public function setMoulds( $moulds ){
$this->moulds = $moulds;
}
/**
* displays the mould selector dropdown
*
* @return \Illuminate\Contracts\Foundation\Application|\Illuminate\Contracts\View\Factory|\Illuminate\Contracts\View\View
*/
public function render(){
return view( 'livewire.orders.order-mould-select' );
}
}
因此,在我的B组件中,我有一个名为FilterMoulds
的方法,该方法将一些过滤器应用于模具集合,然后以过滤后的模具作为参数发出mouldsUpdated
:
/**
* Updates the list of moulds
*/
public function filterMoulds(){
$filters = $this->filters;
$this->moulds = $this->family->moulds->filter( function( $mould ) use( $filters ){
...
...
} );
$this->emit( 'mouldsUpdated',$this->moulds );
}
此方法由组件B刀片中的<select>
启动:
<select class="form-control" wire:model="filter_value" wire:change="setFilter('{{ $characteristic->parameter->symbol }}')">
<option value="">Choose a characteristic</option>
@foreach( $characteristic->data[ 'values'] as $value )
<option value="{{ $value }}" @if( array_key_exists( $characteristic->parameter->symbol,$filters ) && ( $filters[ $characteristic->parameter->symbol ] == $value ) ) class="bg-primary" selected @endif>
{{ $value }} {{ $characteristic->parameter->symbol }}
</option>
@endforeach
</select>
执行过滤模具的动作时,出现此错误:
ErrorException 尝试获取非对象的属性“ id”(视图:\ Path \ To \ My \ Project \ resources \ views \ livewire \ orders \ order-mould-select.blade.PHP)
所以我尝试死掉并在setMoulds
方法中转储$ moulds变量,我得到了(我将附上一张解释更多转储的图像):
解决方法
在类OrderMouldSelect中尝试此操作
public function mount(Mould $mould ){
$this-> moulds = $mould->orderBy('id','asc')->pluck('code','id');
}
在刀片中
<select wire:model="mould_id" class="custom-select @error('mould_id') is-invalid @enderror">
<option value="" readonly="true" hidden="true" selected>{{__('section.select')}}</option>
@if(! empty($moulds) && $moulds->count())
@foreach($moulds as $key => $value)
<option value="{{ $key }}">{{ $value }}</option>
@endforeach
@endif
</select>
@error('mould_id') <span class="text-danger">{{ $message }}</span> @enderror
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。