微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

从livewire中的发射发送集合显然发送其他信息

如何解决从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变量,我得到了(我将附上一张解释更多转储的图像):

In the file you can clearly see that the collection is not the only thing being passed in the $moulds variable

解决方法

在类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 举报,一经查实,本站将立刻删除。