在 VUE 中使用 localStorage 的最简洁方式
Cleanest way to work with localStorage in VUE
我正在尝试将 v-for 指令的值设置到 localStorage。现在它说
Storage length: 1 songs: "undefined"
这是我按下按钮时要存储的内容:
<article
class="all-tracks"
v-for="tracks in artist"
:key="tracks.id"
>
<h1 class="track-title">
{{tracks.track.track_name}}
</h1>
<div class="track_artist">
{{tracks.track.artist_name}}
</div>
<div class="track-album">
{{tracks.track.album_name}}
</div>
<button class="btn btn-secondary btn-sg" @click="addToPlaylist()">
Add to playlist
</button>
</article>
P.S 我将不胜感激对我的代码的任何评论,因为我在这里学习并尝试以最简洁的方式编写,但我是初学者所以请注意下面的错误
import axios from 'axios';
export default {
name: 'SearchArea',
props: {
},
data() {
return {
artist: [],
songs: [],
};
},
methods: {
fetchMusic(e) {
if (e.key === 'Enter') {
axios.get(``, {
headers: {
'Access-Control-Allow-Origin': '*',
},
})
.then((response) => response).then(this.setResults);
}
},
setResults(results) {
this.artist = results.data.message.body.track_list;
this.songs = results.data.message.body.track_list.track;
},
addToPlaylist() {
localStorage.songs = JSON.stringify(this.songs);
}
},
watch: {
artist: {
handler() {
localStorage.setItem('songs', JSON.stringify(this.songs));
},
deep: true,
},
},
}
编辑:好的,这里是一个新的代码示例。在这一篇中,您可以看到一个可能对您有用的 playlist
实现。您将能够看到播放列表逻辑:
- 添加第一个用户
- 追加一个新用户
- 删除整个播放列表
您基本上只需要处理重复项并查看何时将其加载到您的项目中!
因此,正如您问题中的评论所述,您不能也不 不应该 将 HTML 直接存储到 localStorage。
您可以存储对象本身,如果您希望用 localStorage 填充模板,则可以使用一些逻辑。
Here 是关于如何:
的演示
- 调用 API 并使用
async/await
语法等待它
- 循环这些结果
- 将特定用户保存到本地存储
您可能会存储多个用户而不是一个,我不知道。但这是你应该努力的起点。
在这里你可以在屏幕截图上看到,它已正确保存到 localStorage
我正在尝试将 v-for 指令的值设置到 localStorage。现在它说
Storage length: 1 songs: "undefined"
这是我按下按钮时要存储的内容:
<article
class="all-tracks"
v-for="tracks in artist"
:key="tracks.id"
>
<h1 class="track-title">
{{tracks.track.track_name}}
</h1>
<div class="track_artist">
{{tracks.track.artist_name}}
</div>
<div class="track-album">
{{tracks.track.album_name}}
</div>
<button class="btn btn-secondary btn-sg" @click="addToPlaylist()">
Add to playlist
</button>
</article>
P.S 我将不胜感激对我的代码的任何评论,因为我在这里学习并尝试以最简洁的方式编写,但我是初学者所以请注意下面的错误
import axios from 'axios';
export default {
name: 'SearchArea',
props: {
},
data() {
return {
artist: [],
songs: [],
};
},
methods: {
fetchMusic(e) {
if (e.key === 'Enter') {
axios.get(``, {
headers: {
'Access-Control-Allow-Origin': '*',
},
})
.then((response) => response).then(this.setResults);
}
},
setResults(results) {
this.artist = results.data.message.body.track_list;
this.songs = results.data.message.body.track_list.track;
},
addToPlaylist() {
localStorage.songs = JSON.stringify(this.songs);
}
},
watch: {
artist: {
handler() {
localStorage.setItem('songs', JSON.stringify(this.songs));
},
deep: true,
},
},
}
编辑:好的,这里是一个新的代码示例。在这一篇中,您可以看到一个可能对您有用的 playlist
实现。您将能够看到播放列表逻辑:
- 添加第一个用户
- 追加一个新用户
- 删除整个播放列表
您基本上只需要处理重复项并查看何时将其加载到您的项目中!
因此,正如您问题中的评论所述,您不能也不 不应该 将 HTML 直接存储到 localStorage。
您可以存储对象本身,如果您希望用 localStorage 填充模板,则可以使用一些逻辑。
Here 是关于如何:
的演示- 调用 API 并使用
async/await
语法等待它 - 循环这些结果
- 将特定用户保存到本地存储
您可能会存储多个用户而不是一个,我不知道。但这是你应该努力的起点。
在这里你可以在屏幕截图上看到,它已正确保存到 localStorage