浏览量
进入详情页面detail就需要通过update进行浏览量的更新 数据库更新不能使用db.command.inc方法
command是能用的,只是不能用inc方法,这个方法不能实现原子自增自减
测试这个方法: 先创建command属性,再调用update
<script>
const db=uniCloud.database();
const dbCmd = db.command;
export default {
data() {
return {
artId:"",
// 骨架屏状态
loadState:true,
tagStyle:{
p:"line-height:1.7em;font-size:16px;padding-bottom:10rpx",
// 图像间隔,上下10,左右0
img:"margin:10px 0"
},
// 用户信息
detailObj:null
};
},
onLoad(e) {
// 判断有没有ID
if(!e.id){
this.errFun();
// 必须加return,否则后面的代码还会执行
return;
};
this.artId = e.id,
this.getData();
this.upDate();
},
methods:{
// 更新数据
upDate(){
db.collection("quanzi_article").doc(this.artId).update({
// 通过dbCmd属性调用inc方法给view_count字段+1
view_count: dbCmd.inc(1)
}).then(res=>{
res
})
},
刷新页面后,报错提示
定义公共云对象实现阅读量+1
module.exports = {
_before: function () { // 通用预处理器
},
}
云对象
const db = uniCloud.database();
const dbCmd = db.command;
module.exports = {
_before: function () { // 通用预处理器
},
/**
* @param {Object} table 数据表
* @param {Object} attr 属性
* @param {Object} id
* @param {Object} num +1 自增 -1 自减
*/
async operation(table,attr,id,num){
let obj={};
// 这种写法是用中括号给对象增加属性名和属性值
obj[attr] = dbCmd.inc(num)
return await db.collection(table).doc(id).update(obj)
}
}
接下来在前端用这个方法实现修改阅读量
<script>
const db=uniCloud.database();
// 引入自定义云对象 utilsObj
const utilsObj = uniCloud.importObject("utilsObj")
export default {
data() {
return {
artId:"",
// 骨架屏状态
loadState:true,
tagStyle:{
p:"line-height:1.7em;font-size:16px;padding-bottom:10rpx",
// 图像间隔,上下10,左右0
img:"margin:10px 0"
},
// 用户信息
detailObj:null
};
},
onLoad(e) {
// 判断有没有ID
if(!e.id){
this.errFun();
// 必须加return,否则后面的代码还会执行
return;
};
this.artId = e.id,
this.getData();
// 调用修改阅读量方法
this.readUpdate();
},
methods:{
// 修改阅读量方法
readUpdate(){
// 每次自增3
utilsObj.operation("quanzi_article", "view_count", this.artId, 3).then(res=>{
console.log(res);
})
},
// 错误处理方法
errFun(){
uni.showToast({
title:"参数有误",
icon:"none"
})
setTimeout(()=>{
uni.reLaunch({
url:"/pages/index/index"
})
},1000)
},
// 获取网络数据
getData(){
// 将主表副表都查出一个临时表来
let artTemp = db.collection("quanzi_article").getTemp();
let userTemp = db.collection("uni-id-users").field("_id,username,nickname,avatar_file").getTemp();
db.collection(artTemp,userTemp).where(`_id=="${this.artId}"`).get(
{
getOne:true
}).then(res=>{
// 如果data参数不存在吗,表示传递的参数id有误
if(!res.result.data){
this.errFun();
return;
}
// 网络数据获取完成后将骨架屏状态重置为false
this.loadState = false;
// 把获取到的用户信息赋值
this.detailObj = res.result.data
}).catch(err=>{
this.errFun();
})
}
}
}
</script>
刷新一次页面后,阅读量增加了3次