您好,登錄后才能下訂單哦!
這篇文章主要介紹“vue父組件數據更新子組件相關內容未改變問題怎么解決”,在日常操作中,相信很多人在vue父組件數據更新子組件相關內容未改變問題怎么解決問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”vue父組件數據更新子組件相關內容未改變問題怎么解決”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
在父組件中,根據后臺給的數據(數組),v-for生成子組件
<div class="exist"> <existProject :itemprop="item" v-for="(item, index) in getData" :key="index" :index="index" @click="sendIdTogetData(index)" v-show="true"></existProject> </div>
<template> <!-- <transition name="el-zoom-in-center"> --> <div class="existProjectBox" v-show="show2"> <div class="existContentBox"> <div class="existContent"> <div class="existTitle">{{itemprop.title}}</div> <div class="stateBox"> <span class="state">{{ status_tit }}</span> <span class="number" v-if="itemprop.status==2">收集份數:{{itemprop.asyncCount}}份</span> </div> <div class="tiemBox"> {{createtime}} </div> </div> </div> <div class="existButton"> <li v-if="itemprop.status==0" @click="turnEdit(itemprop.qid)"> <i class="icon icon-edit"></i> <span>編輯</span> </li> <li v-if="itemprop.status==0" @click="turnSend(itemprop.qid)"> <i class="icon icon-send"></i> <span>發布</span> </li> <li v-if="itemprop.status==2 "> <i class="icon icon-data"></i> <span>數據</span> </li> <!-- <li v-if="itemprop.status==2 "> <i class="icon icon-data"></i> <span>暫停</span> </li> <li v-if="itemprop.status==2 "> <i class="icon icon-data"></i> <span>終止</span> </li> --> <li @click="delItem(itemprop.qid)"> <i class="icon icon-other"></i> <span>刪除</span> </li> </div> </div> <!-- </transition> --> </template>
<script> import axios from 'axios' export default { data(){w return{ createtime:'', status_tit:'', show2:true } }, props:['itemprop'], methods:{ turnEdit(id){ debugger; console.log(id) axios.defaults.headers.common['token'] = JSON.parse(window.localStorage.getItem('token')) axios.get('/question/'+id) .then(response => { console.log(response); var obj = response.data.data; var contents = obj.contents; for(let i = 0; i < contents.length; i++){ obj.contents[i].component = this.$options.methods.initType(obj.contents[i].type) } console.log(obj) window.localStorage.setItem('workInfoList', JSON.stringify(obj)); this.$router.push({ path: '/edit', query: { id: id } }) window.location.reload() }) .catch(error => { console.log(error) }) }, turnSend(id){ debugger; console.log(id) axios.defaults.headers.common['token'] = JSON.parse(window.localStorage.getItem('token')) axios.get('/question/'+id) .then(response => { console.log(response); var obj = response.data.data; console.log(obj) window.localStorage.setItem('workInfoList', JSON.stringify(obj)); this.$router.push({ path: '/sendProject', query: { id: id } }) window.location.reload() }) .catch(error => { console.log(error) }) }, delItem(id){ this.$confirm('此操作將刪除該文件進入草稿箱, 是否繼續?', '提示', { confirmButtonText: '確定', cancelButtonText: '取消', type: 'warning' }) .then(() => { axios.defaults.headers.common['token'] = JSON.parse(window.localStorage.getItem('token')) axios.delete('/question/'+id) .then(response => { console.log(response) // this.show2 = false this.$parent.getPage(); }) }) .catch(error => { console.log(error) }) }, initType(str){ switch(str){ case 1:return 'Radio'; case 2:return 'check'; case 3:return 'gapFill'; case 4:return 'level'; case 5:return 'photoInput'; case 6:return 'Rate'; case 7:return 'remark'; case 8:return 'selectChoice'; case 9:return 'sort'; case 10:return 'tableNumber'; case 11:return 'temp'; } }, }, mounted(){ // console.log(this.itemprop.createTime) var transformTime = new Date(this.itemprop.createTime) this.createtime = transformTime.toLocaleString(); console.log(this.createtime) }, } </script>
因為有多條數據,所以有分頁處理,在第一頁中數據顯示正常,但是在獲得第二頁數據并賦值給父組件的data后,子組件的信息保留的還是第一頁的信息
watch:{ itemprop:{ handler(n,o){ console.log(this.itemprop); var status = this.itemprop.status; var showCondition = this.itemprop.showCondition; // debugger; this.status_tit = (function(status,showCondition) { if(status==0) { return '未發布'; } if(status==2 && showCondition==1) { // 已發布 return '收集中'; } if(status==2 &&showCondition==0) { // 暫停 return '已暫停'; } if(status==2 &&showCondition==-1) { // 終止 return '已終止'; } if(status==2 &&showCondition==2) { // 問卷發布結束 return '已結束'; } })(status,showCondition) }, deep:true, immediate:true, } }
watch可以監聽子組件的數據變化,數組或者對象要用深度監聽,字符串什么的不用深度監聽,這樣就可以在分頁切換數據后,就不會保留原有的信息,而是新的信息了
這是Element-UI的一個bug,解決方案是從el-table中增加一個row-key屬性,并為row-key設置一個能唯一標識的字段名。
1.這個可以是數據庫的id字段
<el-table row-key="_id" ></el-table>
2.給table增加一個隨機數的key
<el-table :key="Math.random()" ></el-table>
到此,關于“vue父組件數據更新子組件相關內容未改變問題怎么解決”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。