【发布时间】:2021-01-23 02:06:10
【问题描述】:
我有一个“最喜欢”的组件。该组件绘制了一个根据状态获取三个类的星形。为了选择应用到组件的类,我使用了一个计算属性,定义为:
public function getEsFavoritaProperty() {
return $this->idea->users()->where('user_id', Auth::user()->id)->count() > 0;
}
public function getFavoritaProperty() {
if (Auth::guest()) return 'voto-idea-inactivo';
if ($this->EsFavorita) {
return 'voto-idea-seleccionado';
} else {
return 'voto-idea-activo';
}
}
这是西班牙语,但我认为逻辑很清楚:如果没有签名用户(访客),则函数将返回 voto-idea-inactivo 类,如果用户已登录,它将根据询问是否登录的函数返回一个或另一个当前项目被当前用户收藏。
这两个函数按预期工作。如果我直接在数据库中更改数据透视表中的数据,星号会正确显示状态。
现在我在星星中有这个主播<a>...
<a wire:click.prevent="toggleFavorita">
<i class="fas fa-star fa-2x {{ $this->favorita }}"></i>
</a>
所以它切换(附加/分离)关系,功能是:
public function toggleFavorita() {
if ($this->EsFavorita) {
$this->idea->users()->detach(Auth::user()->id);
} else {
$this->idea->users()->attach(Auth::user()->id);
}
}
这个也很完美,如果用户点击星号,该函数会在数据库中创建或删除它应该的关系。问题是星不重绘,并保持以前的状态。如果我重新加载页面,更改就会出现。
那么我如何强制这颗星使用新的计算值刷新?
【问题讨论】:
-
谢谢。我应该如何调用该函数?我在更新数据库后(在
toggleFavorita()函数中)放置了$this->render(),但它不起作用 -
Uhmmm好奇怪,我要点两下,当然是显示PREVIOUS状态了。我的意思是,它的“关闭”,我点击...保持关闭。我签入数据库并存在关系,我再次单击,它“打开”但数据库不再具有关系????
-
这给了我一个错误:“
Public method [toggleFavorita;$refresh] not found on component: [show-idea]” -
$this->render();它应该可以工作 -
不...我试过它也不起作用。我将
$refresh放在一个独立的按钮上,它可以工作,但是单击星形然后单击另一个按钮有点愚蠢。我在按钮上调用了toggleFavorita(); $refresh,但它也不起作用
标签: php laravel laravel-livewire