我有一个简单的复选框表单,它有三个选项。我想动态计算价格,而不是将这些值存储在数据库中。
<div class="custom-control custom-checkbox">
<input type="checkbox"id="option1" wire:click="test" wire:model="additions" value="option1">
<label class="custom-control-label" for="option1">Option 1</label>
</div>
<div class="custom-control custom-checkbox">
<input type="checkbox" id="option2" wire:click="test" wire:model="additions" value="option2">
<label class="custom-control-label" for="option1">Option 2</label>
</div>
<div class="custom-control custom-checkbox">
<input type="checkbox" id="option3" wire:click="test" wire:model="additions" value="option3">
<label class="custom-control-label" for="option1">Option 3</label>
</div>
在刀片文件中显示值的输出
{{ $checkout }}
每个选项都有不同的价格,我正在添加到 $checkout
计算总数。
public $additions = [];
public $checkout = 0;
public function test()
{
// if (in_array('option1', $this->additions)) {
// $this->checkout =+ 10;
// Log::info($this->checkout);
// }
// if (in_array('option2', $this->additions)) {
// $this->checkout += 10;
// Log::info($this->checkout);
// }
// if (in_array('option3', $this->additions)) {
// $this->checkout += 10;
// Log::info($this->checkout);
// }
if (!empty($this->additions)) {
foreach ($this->additions as $key => $value) {
if ($value == 'option1') {
$this->checkout += 10;
}
if ($value == 'option2') {
$this->checkout += 10;
} else {
$this->checkout -= 10;
}
if ($value == 'option3') {
$this->checkout += 10;
} else {
$this->checkout -= 10;
}
}
Log::info($this->checkout);
}
}
价格增加了,但不正确。例如,我为每个选项设置了10个选项,因此当选中所有三个选项时,总数将为30,当选中两个选项时,总数将为20,依此类推。我得到的都是60多岁,而不是30多岁。
任何帮助都会得到报答。
编辑: $this->additions
包含所有选中的项目。例如:如果选择了所有三个选项, $this->additions
将有 option1,option2,option3
在数组中。
1条答案
按热度按时间gudnpqoy1#
首先,您的blade视图应该只有一个根元素,因此您应该将整个内容 Package 在
<div>
标签。这是livewire的事情,它非常重要,因为它使livewire更容易进行dom扩散。其次,你不需要两者兼而有之
wire:click
及wire:model
,你可以用wire:model
独自一人,通过updated()
生命周期钩子-或者专门监听additions
财产通过updatedAdditions()
.然后,当您执行操作时,您应该为每次迭代重置计数器,并避免减去-否则,您将为每次单击增加 checkout 计数器-这部分是您现在看到的。
这里更好的选择是使用包含每个选项的值的查找数组,并在此基础上进行聚合。