最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

vue中v-for數(shù)據(jù)狀態(tài)值變了,但是視圖沒(méi)改變的解決方案

 更新時(shí)間:2022年06月21日 16:17:05   作者:練氣期小修士  
這篇文章主要介紹了vue中v-for數(shù)據(jù)狀態(tài)值變了,但是視圖沒(méi)改變的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

v-for數(shù)據(jù)狀態(tài)值變了,但是視圖沒(méi)改變

問(wèn)題現(xiàn)象

1.你在v-for中列表的每個(gè)item都有個(gè)按鈕,你點(diǎn)擊按鈕,想把按鈕的類(lèi)名通過(guò)一個(gè)屬性show,type為boolean來(lái)動(dòng)態(tài)的選擇

2.v-show通過(guò)每個(gè)item這個(gè)show的true還是false來(lái)顯示

最后發(fā)現(xiàn)你在點(diǎn)擊后,輸出發(fā)現(xiàn),true,false都有變,但是感覺(jué)似乎試圖沒(méi)有重新渲染。通過(guò)搜索,發(fā)現(xiàn)v-for對(duì)于數(shù)組添加和刪除的操作,不會(huì)進(jìn)行二次絢爛,但是這不是添加和刪除 ,只是進(jìn)行值狀態(tài)的改變,即修改。似乎感覺(jué)以前也是這么寫(xiě)就沒(méi)問(wèn)題。

問(wèn)題出現(xiàn)原因

1.你肯定這個(gè)屬性是通過(guò)下標(biāo)來(lái)動(dòng)態(tài)添加的,其實(shí)本質(zhì)還是滿(mǎn)足了對(duì)數(shù)組添加的操作。代碼可能是類(lèi)似這樣的。

data(){
	productDetailList: [],
				list: [{
						id: 1,
						show: true,
						name: '1111'
					},
					{
						id: 2,
						show: true,
						name: '222'
					},
}
var info = JSON.parse(JSON.stringify(res.data.info))
	this.productDetailList = info.productDetailList
	
	for (var i = 0; i < this.productDetailList.length; i++) {
		this.productDetailList[i].show = true
	}

上面在vue中l(wèi)ist列表這樣我直接把show屬性寫(xiě)出來(lái),最后按以往寫(xiě)法是沒(méi)問(wèn)題的,能實(shí)現(xiàn)試圖和數(shù)據(jù)雙向綁定。

所以不同就明顯了,就是差在這個(gè)show屬性我這回是通過(guò)角標(biāo)動(dòng)態(tài)加的。而vue對(duì)于這種不能監(jiān)聽(tīng)的到。

vue當(dāng)然有解決方案

問(wèn)題解決

使用Vue的set方法,使用之前要引入

<script>
	import Vue from 'vue'

1.頁(yè)面

<view class="item-wrap" v-for="(product,index) in productDetailList" :key="index">
?? ??? ??? ??? ?<button :class="product.show == true ??
?? ??? ??? ??? ?'iconfont icon-weibiaoti1 item-btn' : 'iconfont icon-xiangxia item-btn'"
?? ??? ??? ??? ? @click="show(product,index)"></button>
?? ?<view ?v-show="product.show == true ? true : false">
?? ??? ??? ??? ??? ?<view class="item-grid" style="">
<button type="default" class="fold-btn" @click="hideAll">全部折疊</button>

2.方法

methods: {
			
			hideAll(){
				var arr=this.productDetailList
				for(var i=0;i<arr.length;i++){
					arr[i].show=false
					Vue.set(this.productDetailList,i,arr[i])
				}
			},
			show(product, index) {
				product.show=!product.show
				Vue.set(this.productDetailList,index,product)
			},

v-for循環(huán)改變循環(huán)數(shù)據(jù)視圖不更新

在前端開(kāi)發(fā)中如下圖菜單框架(左側(cè)菜單內(nèi)容由頂部菜單點(diǎn)擊后動(dòng)態(tài)更新data內(nèi) menu:[] )v-for循環(huán)menu顯示左側(cè)菜單

問(wèn)題:點(diǎn)擊頂部菜單后(menu[]重新賦值),左側(cè)菜單不能更新為新的menu[]里的內(nèi)容。

原因:

  • 由于 JavaScript 的限制, Vue 不能檢測(cè)以下變動(dòng)的數(shù)組:
  • 當(dāng)你利用索引直接設(shè)置一個(gè)項(xiàng)時(shí),例如: vm.items[indexOfItem] = newValue
  • 當(dāng)你修改數(shù)組的長(zhǎng)度時(shí),例如: vm.items.length = newLength

解決1

為了避免第一種情況,以下兩種方式將達(dá)到像 vm.items[indexOfItem] = newValue 的效果, 同時(shí)也將觸發(fā)狀態(tài)更新:

// Vue.set
Vue.set(example1.items, indexOfItem, newValue)
// Array.prototype.splice`
example1.items.splice(indexOfItem, 1, newValue)

避免第二種情況,使用 splice:

example1.items.splice(newLength)

解決2

v-循環(huán)時(shí)K值選擇數(shù)組對(duì)象的name或其他不唯一值如下圖

原因:key表示的屬性在變化時(shí),強(qiáng)制更新組件,這樣就會(huì)解決vue不能檢測(cè)數(shù)據(jù)變動(dòng)導(dǎo)致v-for視圖內(nèi)容不更新的問(wèn)題。

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Elementui如何限制el-input框輸入小數(shù)點(diǎn)

    Elementui如何限制el-input框輸入小數(shù)點(diǎn)

    這篇文章主要介紹了Elementui如何限制el-input框輸入小數(shù)點(diǎn),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • Vue.js動(dòng)態(tài)添加、刪除選題的實(shí)例代碼

    Vue.js動(dòng)態(tài)添加、刪除選題的實(shí)例代碼

    這篇文章主要介紹了Vue.js動(dòng)態(tài)添加、刪除選題的實(shí)例代碼,非常不錯(cuò)具有參考借鑒價(jià)值,需要的朋友可以參考下
    2016-09-09
  • Vue 重置組件到初始狀態(tài)的方法示例

    Vue 重置組件到初始狀態(tài)的方法示例

    這篇文章主要介紹了Vue 重置組件到初始狀態(tài)的方法示例,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-10-10
  • Vue使用new Image()實(shí)現(xiàn)圖片預(yù)加載功能

    Vue使用new Image()實(shí)現(xiàn)圖片預(yù)加載功能

    這篇文章主要介紹了如何在 Vue 中實(shí)現(xiàn)圖片預(yù)加載的一個(gè)簡(jiǎn)單小demo以及優(yōu)化方案,文中通過(guò)代碼示例介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下
    2024-11-11
  • vue組件學(xué)習(xí)教程

    vue組件學(xué)習(xí)教程

    這篇文章主要為大家詳細(xì)介紹了vue組件學(xué)習(xí)教程,根據(jù)Vue官方文檔學(xué)習(xí)的筆記,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-09-09
  • 一文詳解VueUse中useAsyncState的實(shí)現(xiàn)原理

    一文詳解VueUse中useAsyncState的實(shí)現(xiàn)原理

    在Vue 3 Composition API中,我們可以使用自定義鉤子函數(shù)來(lái)封裝可復(fù)用的邏輯,useAsyncState是一個(gè)用于管理異步狀態(tài)的自定義鉤子函數(shù),本文將給大家介紹一下useAsyncState的實(shí)現(xiàn)原理,感興趣的朋友可以參考下
    2024-01-01
  • vue項(xiàng)目打包成桌面快捷方式(electron)的方法

    vue項(xiàng)目打包成桌面快捷方式(electron)的方法

    本文主要介紹了vue項(xiàng)目打包成桌面快捷方式(electron)的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-06-06
  • vue返回上一頁(yè)面時(shí)不刷新問(wèn)題及解決方案

    vue返回上一頁(yè)面時(shí)不刷新問(wèn)題及解決方案

    這篇文章主要介紹了vue返回上一頁(yè)面時(shí)不刷新問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-05-05
  • Vite+Vue3使用MockJS的實(shí)現(xiàn)示例

    Vite+Vue3使用MockJS的實(shí)現(xiàn)示例

    寫(xiě)一些純前端的項(xiàng)目時(shí),自己造數(shù)據(jù)有些麻煩,于是我們可以利用mock造一些簡(jiǎn)單的數(shù)據(jù),來(lái)滿(mǎn)足我們的需求,本文主要介紹了Vite+Vue3使用MockJS的實(shí)現(xiàn)示例,感興趣的可以了解一下
    2024-01-01
  • Element Table的row-class-name無(wú)效與動(dòng)態(tài)高亮顯示選中行背景色

    Element Table的row-class-name無(wú)效與動(dòng)態(tài)高亮顯示選中行背景色

    這篇文章主要介紹了Element Table的row-class-name無(wú)效與動(dòng)態(tài)高亮顯示選中行背景色,本文詳細(xì)的介紹了解決方案,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-11-11

最新評(píng)論

巩义市| 涿州市| 壤塘县| 盐源县| 鄂伦春自治旗| 纳雍县| 抚州市| 北票市| 中牟县| 陇西县| 洪江市| 昌黎县| 历史| 苍溪县| 静宁县| 黑水县| 剑河县| 五峰| 海晏县| 五大连池市| 武冈市| 凭祥市| 乌鲁木齐县| 四子王旗| 绥棱县| 荥阳市| 柳河县| 寿宁县| 视频| 安泽县| 额敏县| 同仁县| 余江县| 阿勒泰市| 田阳县| 巫山县| 凌源市| 大足县| 勃利县| 西畴县| 博乐市|