javascript - 如何将组件对象移动到全局对象?

标签 javascript vue.js

我目前正在开发一个音乐播放器,我有一个“轨道”组件,它可以检索一个显示歌曲列表的 ajax 请求。 onClick 我将歌曲数据放入一个对象中,我试图将该对象发送到一个完全不相关的组件,即音频播放器。将此数据发送到音频播放器的最佳方式是什么?

追踪

<template>
<div id="tracks">
  <h5 class="header">Top tracks</h5>

  <select name="range" v-model="range">
    <option value="day">Day</option>
    <option value="week">Week</option>
    <option value="month">Month</option>
    <option value="year">Year</option>
    <option value="life">Life</option>
  </select>
  <br>
  <div id="top-tracks">
  <div id="track"  v-for="(track) in tracks" :key='track.id'>
    <img @click="currentTrack(track)" class="cover" :src="'https://api.napster.com/imageserver/v2/albums/' + track.albumId  + '/images/500x500.jpg'">

    <div class=content-name><p>{{track.name}}</p></div>
    <div class="artist-name"><p>{{track.artistName}}</p></div>
  </div>
  </div>

</div>
</template>

<script>
import axios from 'axios';

export default {
  name: 'Tracks',
  components: {
  },
  data () {
    return {
      tracks: [],
      track: {
        name: "",
        artist: "",
        album: "",
        song: ""
      },
      range: 'day'
    }
  },
  created() {
    this.trackData();
  },
  watch: {
    range : function () {
      this.trackData();
    }
  },
  methods: {
    trackData: function () {
      axios.get('http://api.napster.com/v2.2/tracks/top?apikey=YTkxZTRhNzAtODdlNy00ZjMzLTg0MWItOTc0NmZmNjU4Yzk4&limit=10&range=' + this.range)
      .then(response => {
        // JSON responses are automatically parsed.
        this.tracks = response.data.tracks
      })
      .catch(e => {
        this.errors.push(e)
      })
    },
    currentTrack: function (track) {
      this.track.name = track.name;
      this.track.artist = track.artistName;
      this.track.album = track.albumId;
      this.track.song = track.href;

    }
  }
}
</script>

音频播放器

<template>
  <div id="audio-player">
    <div class="player__inner">

      <current-track class="player__left"/>

      <div class="player__center">
        <player-controls/>
        <player-playback/>
      </div>

      <div class="player__right">
        <!-- <device-picker/> -->
        <!-- <volume-bar/> -->
      </div>
    </div>
  </div>
</template>

<script>
  import CurrentTrack from './CurrentTrack';
  import PlayerControls from './PlayerControls';
  import PlayerPlayback from './PlayerPlayback';

  export default {
      name: "audio-player",
      components: {
        CurrentTrack,
        PlayerControls,
        PlayerPlayback
      },
      data () {
        return {

        }
      }
  }
</script>

最佳答案

随着您的应用程序变得越来越大和越来越复杂,Vuex会很好用,但它也引入了突变和 Action 等概念,您可能需要一些时间来理解这些概念。实现你想要的更简单的方法是设置根组件的数据。只需设置根 Vue 组件的数据属性并使用 this.$root.$data 检索它。代码将是这样的:

new Vue({
  ...
  data: {
    user: ...
  }
})

关于javascript - 如何将组件对象移动到全局对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55554905/

相关文章:

javascript - 如何显示所选商品的附加值?

javascript - 尝试将 File 对象作为属性传递给组件并获取空对象。我也想知道这样安全吗?

javascript - AddThis 与 Vue 共享错误链接

vue.js - 如何处理 Vuetify 中 v-menu 的点击事件?

javascript - 带有 Typeform 的 Nuxt.js 导致我强制重新加载页面

javascript - 动态获取ajax/jquery的回复

javascript - chrome.identity.launchWebAuthFlow,如何清除用户缓存?

javascript - 使用 Vuejs 求两个数字之和的按钮函数

javascript - iPad、JavaScript 字符代码和 shiftKey

javascript - 使用 Redux 和 Saga 将状态保留到本地存储