javascript 全局组件上的播放音乐按钮适用于子组件

von4xj4u  于 2023-05-27  发布在  Java
关注(0)|答案(1)|浏览(125)

我想知道一些事情。
我有一个全局组件,它是一个music-player.vue,代码如下:

  1. <button class="btn bg-[#a47551] hover:text-gray-50 p-3 shadow-xl" @click="togglePlayback">
  2. <span class="material-symbols-outlined">
  3. {{ isPlaying ? "pause" : "play_arrow" }}
  4. </span>
  5. </button>
  6. <script>
  7. import { onMounted, ref } from "vue";
  8. export default {
  9. setup() {
  10. const audio = new Audio();
  11. const isPlaying = ref(false);
  12. function togglePlayback() {
  13. if (isPlaying.value) {
  14. pausePlayback();
  15. } else {
  16. playPlayback();
  17. }
  18. }
  19. function playPlayback() {
  20. if (!isPlaying.value) {
  21. audio.play();
  22. isPlaying.value = true;
  23. }
  24. }
  25. function pausePlayback() {
  26. if (isPlaying.value) {
  27. audio.pause();
  28. isPlaying.value = false;
  29. }
  30. }
  31. function handlePlaybackStart() {
  32. isPlaying.value = true;
  33. }
  34. function handlePlaybackPause() {
  35. isPlaying.value = false;
  36. }
  37. onMounted(() => {
  38. audio.src = "./../../../assets/song/1.mp3";
  39. audio.loop = true;
  40. audio.addEventListener("play", handlePlaybackStart);
  41. audio.addEventListener("pause", handlePlaybackPause);
  42. });
  43. return {
  44. togglePlayback,
  45. isPlaying,
  46. };
  47. },
  48. };
  49. </script>

我的问题是:我还想在单击Home.vue上的lihatUndangan按钮时触发togglePlayback()按钮。下面是我的代码:

  1. <button class="btn bg-[#a47551] text-gray-50" @click="lihatUndangan">Lihat undangan</button>
  2. <script>
  3. import { ref } from 'vue';
  4. import { useRouter } from "vue-router";
  5. export default {
  6. data() {
  7. return {
  8. namaTamu: '',
  9. };
  10. },
  11. mounted() {
  12. const isPlaying = ref(false);
  13. const audio = new Audio();
  14. const namaTamu = localStorage.getItem('namaTamu');
  15. if (!namaTamu) {
  16. const namaInput = window.prompt('Masukkan nama:');
  17. if (namaInput && namaInput.trim() !== '') {
  18. localStorage.setItem('namaTamu', namaInput);
  19. this.namaTamu = namaInput;
  20. } else {
  21. this.namaTamu = 'Tamu Undangan';
  22. }
  23. } else {
  24. this.namaTamu = namaTamu;
  25. }
  26. setTimeout(() => {
  27. this.isLoading = false;
  28. }, 500);
  29. },
  30. setup() {
  31. const router = useRouter();
  32. function lihatUndangan() {
  33. router.push('/welcome');
  34. }
  35. return {
  36. lihatUndangan
  37. };
  38. }
  39. };
  40. </script>

有人能给予我一个建议或建议吗?我是新来的,谢谢你:)

uttx8gqw

uttx8gqw1#

如果你想从另一个组件控制一个组件的逻辑,你可以传递一个pub/sub对象给props。在Home.vue中调用pubsub.exec(),在music-player.vue中调用pubsub.subscribe(()=>...或者使用常规的Vue提供/注入方法(https://vuejs.org/guide/components/provide-inject.html

相关问题