vue組件刷新

前兩天漆枚,在工作中遇到一個(gè)特別難搞的問(wèn)題竞川,搞笑的是做夢(mèng)夢(mèng)到自己解決了,醒來(lái)卻忘記了解決辦法酒唉,確實(shí)挺絕望了矩桂,還好最后搞出來(lái)了,跟大家分享下我遇到的問(wèn)題
我是用的element里面的 el-switch組件

  <el-switch
    v-model="item.isOn"
    :active-value=true
    :inactive-value=false
    :disabled="item.isDisableSwitch"
    @change="switchChange($event,item,index)"
     inactive-text="開(kāi)啟活動(dòng)推薦">
  </el-switch>

這個(gè)開(kāi)關(guān)是放在一個(gè)商品里面的痪伦,大致邏輯就是侄榴,按條件搜索出相關(guān)商品,當(dāng)選中商品時(shí)才可以設(shè)置是否開(kāi)啟活動(dòng)推薦网沾,item.isOn是控制el-switch是否開(kāi)啟癞蚕,(true為開(kāi)啟);item.isDisableSwitch設(shè)置是否禁用該el-switch開(kāi)關(guān)
備注下:isOn,和isDisableSwitch都是我在拿到搜索出的商品信息后給每個(gè)商品添加的狀態(tài)辉哥,我在data中增加一個(gè)數(shù)組checkSwitch:[],用于存放選中的switch集合桦山,searchGoodsList用于存放條件搜索出來(lái)的所有商品數(shù)據(jù)

初始時(shí)遍歷所有的商品數(shù)據(jù),并給初始商品數(shù)據(jù)的isOn醋旦,isDisableSwitch賦值恒水,但是在這里面需要判斷一下

for(let i=0;i<this.searchGoodsList.length;i++){
        // 重新搜索  若商品的活動(dòng)推薦已經(jīng)開(kāi)啟 則開(kāi)啟活動(dòng)狀態(tài) 此時(shí)的活動(dòng)推薦應(yīng)該為可用狀態(tài)
        let indx = this.checkSwitch.indexOf(this.searchGoodsList[i].id);
        if(indx != -1){
                this.searchGoodsList[i].isOn=true;
                this.searchGoodsList[i].isDisableSwitch=false;
        }else{
                this.searchGoodsList[i].isOn=false;
        }
        // 重新搜索  若選擇的商品活動(dòng)推薦未開(kāi)啟  則此時(shí)的開(kāi)啟活動(dòng)推薦 應(yīng)顯示可用狀態(tài)
        let inx = this.checkList.indexOf(this.searchGoodsList[i].id);
        if(inx != -1){
              this.searchGoodsList[i].isDisableSwitch=false;
        }else{
              this.searchGoodsList[i].isDisableSwitch = true;
       }
}

但是頁(yè)面上的推薦開(kāi)關(guān)點(diǎn)擊去沒(méi)有反應(yīng)



并且當(dāng)我有別的操作,比如點(diǎn)擊旁邊商品按鈕或者切換搜索條件時(shí)饲齐,就有反應(yīng)了钉凌,感覺(jué)總是慢半拍



我這邊把點(diǎn)擊時(shí)加的@change事件,把點(diǎn)擊后此商品的isOn打印出來(lái)捂人,顯示為true御雕,但是點(diǎn)擊按鈕就是沒(méi)反應(yīng)
 // 活動(dòng)開(kāi)啟
        switchChange($event,item,index){
            console.log(item.isOn,'item.isOn');
            // 不傳值  則默認(rèn)值為true / false
            if(!item.isDisableSwitch){
                if($event){
                    if(this.checkSwitch.length<5){
                        this.checkSwitch.push(item.id);
                    }
                }
                else{//如果此時(shí)把開(kāi)啟的活動(dòng)推薦關(guān)閉
                    for(let i=0;i<this.checkSwitch.length;i++){
                        if(this.checkSwitch[i]==item.id){
                            this.checkSwitch.splice(i,1);
                        }
                    }
                }
            }  
        },


我開(kāi)始推測(cè)可能是新的屬性沒(méi)有觸發(fā)數(shù)據(jù)更新
于是我使用的 $set方法在判斷里面this.$set(item,'isOn',true),或者this.$set(item,'isOn',false),但是還是沒(méi)反應(yīng)
為了確確定它執(zhí)行了我的操作判斷先慷,我在@change里面的判斷中饮笛,各打印了1和2,控制臺(tái)里面也顯示了

我開(kāi)始推測(cè)可能是數(shù)據(jù)源頭出了問(wèn)題论熙,也就是搜索出來(lái)的時(shí)候數(shù)據(jù)鎖死了福青,所以后來(lái)點(diǎn)擊怎么也不改變,我在@change事件中將搜索出來(lái)的所有商品打印出來(lái),但是發(fā)現(xiàn)无午,此時(shí)我點(diǎn)擊的商品的isOn已經(jīng)改變了

我猜可能是searchGoodsList數(shù)據(jù)沒(méi)更新吧

for(let i=0;i<this.searchGoodsList.length;i++){
     this.$set(this.searchGoodsList[i],'isOn',item.isOn);
}

還是不行媒役,百度了下,鋪天蓋地都是提示我視圖不更新宪迟,我甚至跑到搜索點(diǎn)擊后把每條搜索出來(lái)的數(shù)據(jù)也更新了下還是不行
最后中午用手機(jī)來(lái)百度酣衷,看到一個(gè)跟別的不一樣的方法,于是抱著試試的態(tài)度加上去了

 // 活動(dòng)開(kāi)啟
        switchChange($event,item,index){
            console.log(item.isOn,'item.isOn');
            // 不傳值  則默認(rèn)值為true / false
            if(!item.isDisableSwitch){
                if($event){
                    this.$forceUpdate();//強(qiáng)制重新渲染頁(yè)面
                    if(this.checkSwitch.length<5){
                        this.checkSwitch.push(item.id);
                    }
                }
                else{//如果此時(shí)把開(kāi)啟的活動(dòng)推薦關(guān)閉
                    this.$forceUpdate();//強(qiáng)制重新渲染頁(yè)面
                    for(let i=0;i<this.checkSwitch.length;i++){
                        if(this.checkSwitch[i]==item.id){
                            this.checkSwitch.splice(i,1);
                        }
                    }
                }
            }  
        },

但是次泽,但是竟然成功了穿仪,激動(dòng)呀_
所以百度了下this.$forceUpdate()這個(gè)用法用于 強(qiáng)制刷新,用于解決v-for中修改某個(gè)屬性值后頁(yè)面v-if不改變的問(wèn)題意荤,也就是因?yàn)閿?shù)據(jù)層次太多啊片,render函數(shù)沒(méi)有自動(dòng)更新,需手動(dòng)強(qiáng)制刷新組件

最后感謝https://blog.csdn.net/jerryyang_2017/article/details/82467016的分享玖像,希望也能幫到你們

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末紫谷,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子捐寥,更是在濱河造成了極大的恐慌笤昨,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,941評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件握恳,死亡現(xiàn)場(chǎng)離奇詭異瞒窒,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)睡互,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門根竿,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人就珠,你說(shuō)我怎么就攤上這事寇壳。” “怎么了妻怎?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,345評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵壳炎,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我逼侦,道長(zhǎng)匿辩,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,851評(píng)論 1 295
  • 正文 為了忘掉前任榛丢,我火速辦了婚禮铲球,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘晰赞。我一直安慰自己稼病,他們只是感情好选侨,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,868評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著然走,像睡著了一般援制。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上芍瑞,一...
    開(kāi)封第一講書(shū)人閱讀 51,688評(píng)論 1 305
  • 那天晨仑,我揣著相機(jī)與錄音,去河邊找鬼拆檬。 笑死洪己,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的竟贯。 我是一名探鬼主播码泛,決...
    沈念sama閱讀 40,414評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼澄耍!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起晌缘,我...
    開(kāi)封第一講書(shū)人閱讀 39,319評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤齐莲,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后磷箕,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體选酗,經(jīng)...
    沈念sama閱讀 45,775評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評(píng)論 3 336
  • 正文 我和宋清朗相戀三年岳枷,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了芒填。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,096評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡空繁,死狀恐怖殿衰,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情盛泡,我是刑警寧澤闷祥,帶...
    沈念sama閱讀 35,789評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站傲诵,受9級(jí)特大地震影響凯砍,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜拴竹,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,437評(píng)論 3 331
  • 文/蒙蒙 一悟衩、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧栓拜,春花似錦座泳、人聲如沸惠昔。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,993評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)舰罚。三九已至,卻和暖如春薛耻,著一層夾襖步出監(jiān)牢的瞬間营罢,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,107評(píng)論 1 271
  • 我被黑心中介騙來(lái)泰國(guó)打工饼齿, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留饲漾,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,308評(píng)論 3 372
  • 正文 我出身青樓缕溉,卻偏偏與公主長(zhǎng)得像考传,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子证鸥,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,037評(píng)論 2 355