在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/HTML/ 在vue.js中寫個函數(shù)調用時完全沒反應

在vue.js中寫個函數(shù)調用時完全沒反應

現(xiàn)在有個點贊需求,后臺返回數(shù)據(jù),字段名為islike有0和1 兩種狀態(tài)
clipboard.png

clipboard.png

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)
    })
  }
}
回答
編輯回答
局外人

$http請求後t(yī)hen裏的this.zanstatus怎麼2次判斷都是0,估計第2次判斷應是if(this.zanstatus == 1)

2018年2月24日 01:48
編輯回答
別瞎鬧

if if
else if
將like函數(shù)中第二個if 改成else if

2017年3月8日 02:34
編輯回答
深記你

this

2018年8月20日 19:05
編輯回答
神經(jīng)質

不知道你那個代碼是復制粘貼的不,computed里面有一個錯誤,可以先細心的檢查一遍代碼,在必要的地方打印一下當前的值,看是否符合預期。

computed:{
      likeclass:function() {
          if(this.items. != "") {   //這里多了一個.
            if(this.items == 0) {
              this.items = "zan"
            }
            if(this.items == 1) {
              this.items  = "zan-active"
            }
            return this.items
          }
      }
    },
2018年2月1日 05:38
編輯回答
失魂人

有幾個建議給你:
1,樓上說了,this.zanstatus兩次判斷都是0
2,既然用了vue,就不要去操作dom,使用數(shù)據(jù)驅動v-bind:class
3,在函數(shù)里不要隨便使用this,除非你非常清楚指向,最好用 let self = this;

2018年3月12日 02:33
編輯回答
帥到炸

首先想說的是 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)
    })
  }
}

希望能幫助到你!如果我哪里有錯誤還請指出

2018年4月18日 11:53