【发布时间】:2018-10-30 21:08:24
【问题描述】:
我正在使用 vue.js 和 axios 编写一个页面,以通过 REST API 从 WP 站点的类别中获取最新帖子的内容。帖子内容始终是有序列表 (OL)。注入的 OL 的项目随后将显示为轮播。 OL注入成功,但操作失败。有没有人会指出我写的JS中的问题?使用 jQuery 可以轻松完成相同的任务,但我只是想练习一些新的东西。
HTML:
<div class="frame ajax annoucements">
<h1 id="announcements-title" class="material ajax-title">Announcements<span class="title-this-week"></span></h1>
<div id="app" class="ajax-body material" v-html="posts[0].content.rendered">
</div>
</div>
JS:
var tcnt = 0;
new Vue({
el: '#app',
data: {
posts: []
},
created() {
axios.get('http://www.just-a-wp-site.com/wp-json/wp/v2/categories/')
.then((response) => {
var categoryId = 0;
response.data.forEach(function(category){
if (category.slug == 'announcements') {
categoryId = category.id;
console.log('Category ID: ' + category.id);
}
});
return categoryId;
})
.then((categoryId) => {
console.log(categoryId);
return axios.get('http://www.just-a-wp-site.com/wp-json/wp/v2/posts/', {
params: {
categories: categoryId,
per_page: 1,
status: 'publish'
}
});
})
.then((response) => {
console.log(response.data);
this.posts = response.data;
})
.catch((error) => {
console.log(error.message);
})
},
mounted() {
var announcements = document.querySelectorAll('frame.ajax .ajax-body > ol > li');
console.log(announcements.length);
setInterval(function(){
var target = announcements.length % tcnt;
for (i = 0; i < announcements.length; i++) {
if (i == target) {
announcements[i].style.display = 'block';
}
else {
announcements[i].style.display = 'initial';
}
}
tcnt++;
}, 1000);
}
});
【问题讨论】:
-
在 vue 项目中直接使用 DOM 并不是最佳实践,稍后我会举一个例子来实现相同的功能。 v-html 渲染的内容是非响应式的。
标签: javascript ajax vue.js axios