单击“热门”时,如何用新查询(getPopular)的结果替换内容?
(v-for =“所有赌场中的赌场”需要改为显示:v-for =“getPopular中的赌场”)
<div @click="activate(1); getPopular();">Popular</div>
<div @click="activate(2); getNew();">New</div>
<div id="list" v-for="casino in allCasinos" :key="casino.name">
<div v-if="$apollo.loading">Loading...</div>
<div>{{ casino.name}}</div>
</div>
<script>
import gql from 'graphql-tag';
methods: {
activate:function(el){
this.active_el = el;
},
},
apollo: {
allCasinos: gql`{
allCasinos(limit: 6) {
name,
}
}`,
getPopular: gql`{
getPopular(limit: 6) {
name,
}
}`,
getNew gql`{
getNew(limit: 6) {
name,
}
}`,
</script>
在这种情况下,没有理由使用单独的查询 - 使用filter
(limit
旁边)参数的一个常见查询。
casinos: gql`query casinos($filter: String!) {
casinos(filter: $filter, limit: 6) {
name
}
}`,
您可以定义一个本地数据属性casinos
,它存储您要显示的当前赌场集。你可以在每个casinos
处理程序中设置click
的值。最后你可以在你的casinos
中使用allCasinos
而不是v-for
:
<div @click="activate(1); casinos = getPopular();">Popular</div>
<div @click="activate(2); casinos = getNew();">New</div>
<div id="list" v-for="casino in casinos" :key="casino.name">
<div v-if="$apollo.loading">Loading...</div>
<div>{{ casino.name}}</div>
</div>
<script>
import gql from 'graphql-tag';
data: function () {
return {
casinos: this.allCasinos
}
},