我在我的livewire项目中使用了一个choices-tags选择列表,选项是permissionCategories,我创建了一个这样的属性
public function getPermissionCatsProperty(){
return PermissionCategory::get();
}
字符串
并且此permissionCategory具有其权限的子级,当我编辑角色时,我希望在选择列表中选中此角色的权限
这是我在名为choices-select的组件中创建的选择列表
<div class="row">
<div class="col-12">
<label class="mt-4 form-label">Tags</label>
<select class="form-control" name="{{$name}}" id="choices-tags" multiple>
{{$slot}}
</select>
</div>
</div>
@push('js')
<script src="../../../assets/js/plugins/choices.min.js"></script>
<script>
if (document.getElementById('choices-tags')) {
var tags = document.getElementById('choices-tags');
const examples = new Choices(tags, {
removeItemButton: true
});
}
</script>
@endpush
型
我用的是这样的形式
<div wire:ignore>
<x-choices-select :name="'permissions[]'">
<option value="">Select Permission</option>
@if(isset($this->permissionCats))
@foreach($this->permissionCats as $category)
<optgroup label="{{$category->name}}">
@if(isset($category->permissions))
@foreach($category->permissions as $permission)
<option value="{{$permission->id}}" {{@$role->hasPermissionTo($permission->name) ? :'selected' : ''}}>{{@$permission->name}}</option>
@endforeach
@endif
</optgroup>
@endforeach
@endif
</x-choices-select>
</div>
型
$role变量来自这里
public $role;
public function edit($role_id)
{
$this->resetValidation();
$this->role = Role::firstWhere('id', $role_id);
$this->modalType = 'edit';
$this->dispatchBrowserEvent('show-modal', ['modal_id' => 'create_role']);
}
型
- permissionCats工作正常,但问题出在$role变量中,我确信$role变量在表单中的每个地方都工作正常,因为当我编辑某些角色时,表单模态中的字段会采用我试图编辑的$role的值。但问题是,当我为选择列表使用wire:ignore时,$role变量在选择列表中变为null,但如果我这次不对选择列表使用wire:ignore*,$role变量工作正常,但选择列表的类和js却逃脱了。我尝试了一切我可以解决它,但我不能,我甚至试图把选择列表在一个livewire组件为它自己和使用它在第一个,每当我试图编辑一个角色,我做发射它与**$role**变量,但它仍然没有工作,并未来空的选择列表。
如果你知道如何解决这个问题,请帮助我,谢谢大家。
1条答案
按热度按时间izkcnapc1#
您提供的代码足以提供帮助。提供包含
<form>.....</form>
标记和edit
方法(例如wire:submit.prevent='edit({{ $role_id }})'
)的完整模态表单