我有一個Vue實例。Vuejs和Request:計算屬性函數不顯示GET JSON值
// create a root instance
var app = new Vue({
el: '#app',
data:
{
album: '',
artist: '',
link: '',
genre: '',
rating: '',
genres: ["Memphis Rap", "R&B\Soul", "Pop", "Vaporwave", "Alt-Lat"],
length: 0
},
methods: {
addAlbum: function (event) {
this.youtubeAlbumList.push({ album: this.album, artist: this.artist, link: this.link, genre: this.genre, rating: this.rating });
request.post(
'http://localhost:3000/album',
{ json: { album: this.album, artist: this.artist, link: this.link, genre: this.genre, rating: this.rating } },
function (error, response, body) {
if (!error && response.statusCode == 201) {
console.log(body)
}
}
);
this.length = this.youtubeAlbumList.length;
this.album = '';
this.link = '';
this.genre = 'Genre';
this.rating = '';
}
},
computed: {
albumList:
{
get: function() {
request.get(
'http://localhost:3000/album',
function (err, res, body) {
var info = JSON.parse(body);
//.forEach(function(obj) { console.log(obj.id); });
return info;
}
)
}
}
}
});
我想使用Request的get方法來填充'albumList'。服務器成功返回200狀態碼。在開發工具中,我看到JSON正在返回。
的問題是,該名單(雖然短)沒有顯示在網頁上。生成列表,我用了以下組件:
Vue.component('album-component', {
template: `
<div class="content">
<div class="col-sm-6 col-md-4">
<div class="thumbnail">
<img src="#" alt="#">
<div class="caption">
<h3>{{x.album}}</h3>
<div class="message-body">
<h2>Artist: {{x.artist}}</h2>
<h3>Link: <a v-bind:href="x.link">Link</a></h3>
<div>Genre: {{x.genre}}</div>
<div>Rating: {{x.rating}}</div>
</div>
<p><a href="#" class="btn btn-primary" role="button">Button</a> <a href="#" class="btn btn-default" role="button">Button</a></p>
</div>
</div>
</div>
</div>`,
props: ['album'],
data: function() {
return {
x:this.album
}
}
});
// register
Vue.component('youtube-album-list-component', {
template: `<div class="row">
<album-component v-for="album in albumList" :album="album"> </album-component>
</div>`
,
props: ['albums'],
data: function() {
return {
albumList: this.albums
}
}
})
而且
<div id="app">
<div>
<div class="input-group input-group-med">
<span class="input-group-addon">Album</span>
<input v-model="album" class="form-control" placeholder="Title">
</div><br>
<div class="input-group input-group-med">
<span class="input-group-addon">Artist</span>
<input type="text" class="form-control" placeholder="Name" v-model="artist">
</div><br>
<div class="input-group input-group-med">
<span class="input-group-addon">Link</span>
<input type="text" class="form-control" placeholder="Link" v-model="link">
</div><br>
<div v-cloak class="input-group input-group-med">
<select v-model="genre">
<option v-for="genre in genres" v-bind:values="genre">{{genre}}</option>
</select>
</div>
<br>
<div class="input-group input-group-med">
<span class="input-group-addon">Rating</span>
<input type="text" class="form-control" placeholder="Rating" v-model="rating">
</div><br>
</div>
<button v-on:click="addAlbum" type="button" class="btn btn-danger btn-lg">Left</button>
<br>
<br>
<div>
<div class="page-header result-header">
<h1>Album list</h1>
</div>
</div>
<youtube-album-list-component :albums="albumList"></youtube-album-list-component>
</div>
我試圖通過計算albumList在我的YouTube專輯列表組分作爲道具中的index.html 。然後使用該列表創建相冊組件。我試圖找出原因,儘管info變量有一個返回的數組,但它沒有被渲染。有任何想法嗎?
屬性,計算或其他,不能是異步。 –
@MathewJibin Vuejs通常如何處理渲染異步數據?我是否必須使用[vue-async-computed](https://github.com/foxbenjaminfox/vue-async-computed)來實現這一目標? – TYMG
您必須調用一個操作來請求異步資源,或者您可以在vue組件的任何生命週期事件掛鉤中執行該操作,然後設置一個支持屬性。如果沒有進一步處理,您可以綁定到其他屬性,您可以使用計算屬性,該屬性將根據支持屬性自動更新。 –