У меня есть любимый компонент. Этот компонент рисует звезду, которая получает три класса в зависимости от состояния. Чтобы выбрать, какой класс применить к компоненту, я использую вычисляемое свойство, определенное как:
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);
}
}
Этот также отлично работает, если пользователь нажимает на звездочку, функция создает или удаляет отношение в базе данных, как и должно. Проблема в том, что звезда не перерисовывается, а сохраняет прежнее состояние. Если я перезагружу страницу, изменения появятся.
Итак, как мне заставить эту звезду обновиться с новым вычисленным значением?
$this->render()
сразу после обновления базы данных (в функцииtoggleFavorita()
), но это не работает - person luisfer   schedule 08.10.2020Public method [toggleFavorita;$refresh] not found on component: [show-idea]
- person luisfer   schedule 08.10.2020$this->render();
должно работать - person Kamlesh Paul   schedule 08.10.2020$refresh
на отдельную кнопку, и она работает, но немного глупо нажимать на звездочку, а затем на другую кнопку. Я позвонилtoggleFavorita(); $refresh
по кнопке, но она тоже не работает - person luisfer   schedule 08.10.2020