現(xiàn)在有個點贊需求,后臺返回數(shù)據(jù),字段名為islike有0和1 兩種狀態(tài)
0:當前用戶沒有贊這條商品
1:代表用戶已經(jīng)贊了這條商品 圖標變?yōu)辄S色
后臺返回的數(shù)據(jù)大概是這樣:
請求接口的時候islike賦值給data中的items
this.items = res.body.lists;
this.zanstatus = res.body.lists.islike
{
msgflag:1,//1:數(shù)據(jù)傳遞成功 0:數(shù)據(jù)傳遞失敗
lists:{
....,
islike:1//當前用戶已經(jīng)點贊過該商品
}
}
<div class="demo">
<button :class="likeclass" @click="like"></button>
</div>
var demo = new Vue({
el:"",//略
data:{
items:"",//存儲后端返回的數(shù)據(jù)
zanstatus:""http://存儲返回的islike值
},
computed:{
likeclass:function() {
if(this.items. != "") {
if(this.items == 0) {
this.items = "zan"http://正?;疑珗D標
}
if(this.items == 1) {
this.items = "zan-active"http://圖標變?yōu)辄S色
}
return this.items
}
}
},
})
!!!!到現(xiàn)在一切正常,后端傳過的islike=0 圖片正常為灰色,islike = 1圖片變黃色
點擊這個贊圖標的時候,就有問題了!?。?!
//點擊手形贊的圖標的時候,判斷當前的islike值,如果為0說明用戶要點贊,如果為1說明用戶要取消贊
點擊的時候調用like這個方法,class沒發(fā)生任何變化 我嘗試alert出likestatus的值,如果初始狀態(tài)為1那么無論怎么點擊依然為1,如果初始狀態(tài)為0那么無論怎么點擊也依然是0!!
求大神幫忙看看哪里除了問題
methods:{
like:function() {
this.$http({
url:"請求點擊取消贊或點贊的接口",
params:{....},
headers:{'Content-Type': 'appliaction/json'}
}).then(function(res){
if(res.body.msgflag == 1) {//代表請求成功
if(this.zanstatus == 0) {//如果當前zanstatus為0表示用戶想點贊
$('button').removeClass('zan').addClass('zan-active');
this.zanstatus = 1
}
if(this.zanstatus == 0) {//如果當前zanstatus為1表示用戶取消點贊
$('button').removeClass('zan-active').addClass('zan');
this.zanstatus = 0
}
}
}
,function(err){
console.log(err)
})
}
}首先想說的是 vue 就是數(shù)據(jù)驅動盡可能不去操作 dom, 而 jquery 就是為了操作 dom 而存在的,為什么要把兩者結合呢???
首先likeclass可以這么寫
computed:{
likeclass:function() {
var classes = ['zan', 'zan-active']
// 盡量用 !==
if(this.items!== '') {
return this.items = classes[this.items]
}
// 按照你的方式是以上寫法
---
// 這個方法既然是改變的 this.items 為什么要放在computed呢?
// 將 classes 放在 data 里面,因為不知道后面是不是還要有 2,3,4等狀態(tài),
// 不然可以直接在標簽上 使用三元運算綁定 class, <div class="zan" :class="items === 0 ? '' : '-active'"><div>
// 將狀態(tài)的 class 值放在數(shù)組里面就可以直接在 tag 上 <div :class="classes[items]"><div>
}
},
其次,點贊方法
methods:{
// 你的點贊方式是什么類型的請求???
// 那我假設是 post
// 不知道你用的是不是 axios, 我假設你用的是
like:function() {
let url = `假裝是一個url`
let params = {}
let config = {
headers: {...}
}
// 這里看到你用的不是箭頭函數(shù),那就要緩存 this
let _this = this
this.$http.post(url, params, config).then(function(res){
// 為什么有兩次 this.zanstatus == 0 的判斷 ???
// 好吧 應該是 0 想點贊, 1 取消點贊
if(res.body.msgflag == 1) { //代表請求成功
_this.items = _this.zanstatus
// 至于你的 zanstatus 是怎么回事 你再研究下
}
},function(err){
console.log(err)
})
}
}
希望能幫助到你!如果我哪里有錯誤還請指出
北大青鳥APTECH成立于1999年。依托北京大學優(yōu)質雄厚的教育資源和背景,秉承“教育改變生活”的發(fā)展理念,致力于培養(yǎng)中國IT技能型緊缺人才,是大數(shù)據(jù)專業(yè)的國家
達內教育集團成立于2002年,是一家由留學海歸創(chuàng)辦的高端職業(yè)教育培訓機構,是中國一站式人才培養(yǎng)平臺、一站式人才輸送平臺。2014年4月3日在美國成功上市,融資1
北大課工場是北京大學校辦產(chǎn)業(yè)為響應國家深化產(chǎn)教融合/校企合作的政策,積極推進“中國制造2025”,實現(xiàn)中華民族偉大復興的升級產(chǎn)業(yè)鏈。利用北京大學優(yōu)質教育資源及背
博為峰,中國職業(yè)人才培訓領域的先行者
曾工作于聯(lián)想擔任系統(tǒng)開發(fā)工程師,曾在博彥科技股份有限公司擔任項目經(jīng)理從事移動互聯(lián)網(wǎng)管理及研發(fā)工作,曾創(chuàng)辦藍懿科技有限責任公司從事總經(jīng)理職務負責iOS教學及管理工作。
浪潮集團項目經(jīng)理。精通Java與.NET 技術, 熟練的跨平臺面向對象開發(fā)經(jīng)驗,技術功底深厚。 授課風格 授課風格清新自然、條理清晰、主次分明、重點難點突出、引人入勝。
精通HTML5和CSS3;Javascript及主流js庫,具有快速界面開發(fā)的能力,對瀏覽器兼容性、前端性能優(yōu)化等有深入理解。精通網(wǎng)頁制作和網(wǎng)頁游戲開發(fā)。
具有10 年的Java 企業(yè)應用開發(fā)經(jīng)驗。曾經(jīng)歷任德國Software AG 技術顧問,美國Dachieve 系統(tǒng)架構師,美國AngelEngineers Inc. 系統(tǒng)架構師。