使用Laravel@push Blade模板引擎动态推送脚本

使用Laravel@push Blade模板引擎动态推送脚本,laravel,laravel-livewire,Laravel,Laravel Livewire,我有一个Laravel组件,负责创建select2字段并绑定livewire属性。它工作得很好,但问题是我有一个页面需要一个动态表单,其中包含一个addfield按钮,该按钮负责创建动态字段。这就是问题所在,在Laravel组件中用@push指令包装的脚本代码不会被推送到@stack,因为页面已经加载 有人遇到过这种问题吗?请帮帮我,我被困在这上面了。我使用的是Laravel8.x和LiveWire2.x 我得到的输出: [1] : 选择两个叶片组件 <div wire:ignore>

我有一个Laravel组件,负责创建select2字段并绑定livewire属性。它工作得很好,但问题是我有一个页面需要一个动态表单,其中包含一个addfield按钮,该按钮负责创建动态字段。这就是问题所在,在Laravel组件中用
@push
指令包装的脚本代码不会被推送到
@stack
,因为页面已经加载

有人遇到过这种问题吗?请帮帮我,我被困在这上面了。我使用的是Laravel8.x和LiveWire2.x

我得到的输出: [1] :

选择两个叶片组件

<div wire:ignore>
    <select class="form-control select2" style="width: 100%" id="{{ $id }}" {{ $attributes }}>
        @if ($placeHolder)
            <option></option>
        @endif
        @foreach ($iteratable as $iteratableItem)
            <option value="{{ $value ? $iteratableItem->{$value} : $iteratableItem }}">
                {{ ucwords(implode(' ', explode('-', $label ? $iteratableItem->{$label} : $iteratableItem))) }}
            </option>
        @endforeach
    </select>

    @push('js')
    <script>
        $(document).ready(function() {
            let currentSelect = $('#{{ $id }}');
            let isMultiple = currentSelect.attr('multiple') ? true : false;
            let placeHolder = '{{ $placeHolder }}';
            let selectOptions = {
                placeholder: placeHolder,
                allowClear: isMultiple
            };
            
            currentSelect.select2(selectOptions);
            currentSelect.on('change', function() {
                let elementName = $(this).attr('wire:model');
                var data = $(this).val();
                @this.set(elementName, data);
            })
        });
    </script>
    @endpush
</div>

@如果($占位符)
@恩迪夫
@foreach($IteratableAs$iteratableItem可迭代)
{{ucwords(内爆('',爆炸('-',$label?$iteratableItem->{$label}:$iteratableItem))}
@endforeach
@推送('js')
$(文档).ready(函数(){
让currentSelect=$('#{{$id}}');
设isMultiple=currentSelect.attr('multiple')?true:false;
设占位符=“{{$placeHolder}}”;
让我们选择选项={
占位符:占位符,
allowClear:isMultiple
};
当前选择。选择2(选择选项);
currentSelect.on('change',function(){
让elementName=$(this.attr('wire:model');
var data=$(this.val();
@此.set(元素名称、数据);
})
});
@端推
负责创建动态循环的Foreach循环:

@foreach ($rater_type as $index => $raterField)
    <div class="form-group">
        <div class="row">
            <div class="col-md-6">
                <div class="form-group">
                    <label for="rater_type-{{ $index }}">Rater Type</label>
                    <small class="required">Required</small>
                    <x-select-two-field name="rater_type[]" id="rater_type-{{ $index }}" place-holder="Select Rater Type #{{ $index + 1 }}" required :iteratable="$registeredRaterTypes" value="id" label="name" wire:model="rater_type.{{ $index }}" />
                    @error('rater_type.{{ $index }}') <small class="text-danger">{{ $message }}</small> @enderror
                </div>
            </div>
            <div class="col-md-6">
                <div class="form-group">
                    <label for="rater_count-{{ $index }}">Rater Count</label>
                    <small class="required">Required</small>
                    <input class="form-control" type="number" min="1" step="1" name="rater_count[]" id="rater_count-{{ $index }}" placeholder="Number of Raters for Rater Type #{{ $index + 1 }}" wire:model.debounce.600ms="rater_count.{{ $index }}" required />
                    @error('rater_count.{{ $index }}') <small class="text-danger">{{ $message }}</small> @enderror
                </div>
            </div>
        </div>
        <div class="d-flex justify-content-end">
            <div class="btn-group" role="group">
                @if ($loop->last)
                <button type="button" class="btn btn-success btn-sm" wire:click="addRaterField">
                    <i class="fas fa-plus mr-2"></i>
                    Add Rater
                </button>
                @endif
                @if (($loop->last && !$loop->first) || !$loop->last)
                <button type="button" class="btn btn-danger btn-sm" wire:click="removeRaterField({{ $index }})">
                    <i class="fas fa-close mr-2"></i>
                    Remove Rater
                </button>
                @endif
            </div>
        </div>
    </div>
    @endforeach
@foreach($rater\u类型为$index=>$raterField)
评分员类型
要求的
@错误('rater_type.{{$index}}'){{$message}}@enderror
评分员计数
要求的
@错误('rater_count.{{$index}}'){{$message}}@enderror
@如果($loop->last)
添加评分器
@恩迪夫
@if(($loop->last&&!$loop->first)| |!$loop->last)
删除评分器
@恩迪夫
@endforeach

在livevirefile中添加emit函数


$this->emit('loadData')
您可以添加所获得错误的屏幕截图吗?这会很有帮助。@Gi1ber7谢谢您这么快的回复。没有错误,只是有一个Livewire警告说“Livewire脚本已经加载,请确保不要加载它们”,除此之外,它将只显示HTML标记。