【发布时间】:2017-12-01 12:33:17
【问题描述】:
我构建了一些功能,当我尝试将其导出到 vue 组件时它停止工作。
我几乎可以肯定这与组件渲染模板时 ajax 不可用有关,因为模板内的数组为空。
谁能看到延迟渲染直到加载 ajax 的任何方法?
也许我找错树了。数据在 ajax .done() 回调中可用。
<template>
<div v-for="item in filteredItems" @mouseover="activate" @mouseout="deactivate" @click="openlink" class="item" :data-link="item.link">
<div class="vline"></div>
<div class="details">
<div class="top">
<div class="media">{{item.sectors}}</div>
<div class="title">{{item.title}}</div>
</div>
<div class="description">{{item.description}}</div>
</div>
<div class="img">
<div class="overlay"><a class="button" v-bind:href="'featured/'+item.link">View project <span class="plus"><span>[</span><span>+</span><span>]</span></span></a></div>
<div v-if="context == 'home'">
<img class="workimg" v-bind:src="item.imagemobile">
</div>
<div v-else>
<img class="workimg" v-bind:src="item.imagemobile">
</div>
</div>
</div>
</div>
</template>
<script>
export default {
props: ['context'],
data() {
return {
work: [],
}
},
computed: {
filteredItems: function () {
if (this.context == 'home') {
return this.work.filter(function (works) { return works});
}
else {
return this.work.filter(function (works) { return works});
}
},
},
mounted() {
self= this;
$.ajax({
method: "GET",
url: "/work.json",
})
.done(function(data){
self.work = data;
console.log(self.work);
// work has data!
})
.fail(function(xhr, status, error) {
console.log(error)
});
}
}
</script>
编辑:
一定是在 ajax 函数中使用了 this/self,因为箭头语法让它工作,这很奇怪,因为这看起来是正确的。
$.ajax({
method: 'GET',
url: '/work.json'
})
.done(data => {
this.work = data;
})
.fail((xhr, status, error) => {
})
【问题讨论】:
-
你遇到了什么错误?
-
模板没有渲染,因为没有数据。
-
模板应在检索数据时呈现。这是您模板的第一行吗?带有 v-for 的 div?
-
嗨,伯特,试过这个,但那不是因为 console.log(this.work);计算出来的“filteredItems”里面是空的。
-
没错,它最初是空的。当你的 Ajax 完成时,它会再次被调用。
标签: ajax components vuejs2