javascript - 如何将组件对象移动到全局对象?
问题描述
我目前正在开发音乐播放器,我有一个“曲目”组件,用于检索显示歌曲列表的 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会很好用,但它也引入了诸如突变和动作之类的概念,您可能需要一些时间来理解这些概念。实现您想要的更简单的方法是设置根组件的数据。只需设置根 Vue 组件的 data 属性并使用this.$root.$data
. 代码将是这样的:
new Vue({
...
data: {
user: ...
}
})
推荐阅读
- solr - solr 7.5 建议多词搜索特殊字符和数字显示顶部
- php - PHP - Wordpress 无法从 URL 没有扩展名的 URL 获取图像
- sequelize.js - GraphQL/Sequelize:SQL 别名
- asp.net - 错误:连接未关闭。连接的当前状态为打开
- c# - 统计销售数量并在列表视图中显示 C#
- powerbi - 如何在 Power BI 服务上刷新使用自定义函数的报表?
- c# - 根据 ComboBox 值显示 DataGridView
- c - txt的一部分和txt的另一部分之间的值是多少?
- android-studio - 错误:无法在 pubspec.yaml 中找到资产条目:“assets/CupertinoIcons.ttf”
- jquery - 数据表头没有修复?建议我解决这个问题?