我的Vue组件如下:
<template>
...
<b-col v-for="item in items"
v-bind:key="item.id"
cols="2">
...
<strong slot="header" class="text-dark" :title="item.tittle" >{{item.tittle}}</strong><br/>
...
<strong class="bg-warning text-dark"><i class="fa fa-money"></i> <b>{{item.price}}</b></strong><br/>
...
</b-col>
...
<b-pagination size="sm" :total-rows="itemsPagination.total" :per-page="itemsPagination.per_page" v-model="itemsPagination.current_page" prev-text="Prev" next-text="Next" hide-goto-end-buttons/>
...
</template>
<script>
export default {
...
data () {
return{
items: '',
itemsPagination: ''
}
},
mounted: function () {
this.getItems()
},
methods: {
getItems() {
let params = []
...
let request = new Request(ApiUrls.items + '?' + params.join('&'), {
method: 'GET',
headers: new Headers({
'Authorization': 'bearer ' + this.$session.get(SessionKeys.ApiTokens),
'Content-Type': 'text/plain'
})
})
fetch(request).then(r=> r.json())
.then(r=> {
this.items = r.data
this.itemsPagination = r
})
.catch(e=>console.log(e))
}
}
}
</script>
如果我console.log(this.itemsPagination)
,则在控制台中的结果如下:
我在应用程序中的分页视图如下:
如果执行脚本,它将在页面1中显示项目的内容。但是,如果单击页面2等,则项目的内容不变。我仍然感到困惑以使其正常运行
我该如何解决这个问题?
更新
我使用coreui
https://coreui.io/vue/demo/#/base/paginations
https://github.com/coreui/coreui-free-vue-admin-template/blob/master/src/views/base/Paginations.vue
答案 0 :(得分:1)
您正在尝试v-model="itemsPagination.current_page"
,但是您将itemsPagination
初始化为空字符串:
data () {
return{
items: '',
itemsPagination: ''
}
}
Vue cannot detect property addition or deletion,因此没有任何反应。您需要将itemsPagination
初始化为包含(至少)current_page
的对象:
data () {
return{
items: '',
itemsPagination: {
current_page: 1
}
}
}
更新: 您实际上可以编辑example here。双击右上角进行编辑,然后粘贴以下代码:
<template>
<div>
<h6>Default</h6>
<b-pagination size="md" :total-rows="100" v-model="itemsPagination.current_page" :per-page="10">
</b-pagination>
<br>
<h6>Small</h6>
<b-pagination size="sm" :total-rows="100" v-model="itemsPagination.current_page" :per-page="10">
</b-pagination>
<br>
<h6>Large</h6>
<b-pagination size="lg" :total-rows="100" v-model="itemsPagination.current_page" :per-page="10">
</b-pagination>
<br>
<div>currentPage: {{itemsPagination.current_page}}</div>
</div>
</template>
<script>
export default {
data () {
return {
itemsPagination: {
current_page: 1
}
}
}
}
</script>
<!-- pagination-1.vue -->
答案 1 :(得分:0)
我相信,您不会重新激活items
。
您可以尝试按照以下步骤操作吗:
data () {
return{
container:{
// for Vue.set I didnt found how to do it without nested fields for data object, so did like that on my own project
items: '',
itemsPagination: ''
}
}
},
然后获取:
Vue.set(this.container, 'items', r.data);
// or this.$set, if you dont use arrow function here, and not Vue accessable
请参阅https://vuejs.org/v2/guide/reactivity.html
如果这样做没有帮助,请检查console.log(this)
内部的fetch
是否是您的组件
答案 2 :(得分:0)
也许这不是回答您的最佳方法(重定向到视频),但是我认为这部视频比我更清楚发生了什么以及如何解决。