Vue中data數(shù)據(jù)初始化方法詳解
當(dāng)組件的根元素使用了v-if的時(shí)候, 并不會(huì)初始化data中的數(shù)據(jù) 如果想完全銷毀該組件并且初始化數(shù)據(jù),需要在使用該組件的本身添加v-if 或者是手動(dòng)初始化該組件中的數(shù)據(jù)
初始化化數(shù)據(jù)的一些方法
Object.assign(this.$data, this.$options.data()) this.$data:當(dāng)前的data數(shù)據(jù)(修改過(guò)后的); this.$options.data():初始化的data數(shù)據(jù); Object.assign的作用就是把this.$options.data()的值賦值給this.$data; // 表單初始化 this.form = this.$options.data().form // vue在創(chuàng)建頁(yè)面是會(huì)把data數(shù)據(jù)綁定到option屬性里,恢復(fù)只需要調(diào)用就可以了
下面詳細(xì)說(shuō)說(shuō)Object.assign的用法:
ES6的官方文檔的解釋是:Object.assign() 方法用于將所有可枚舉屬性的值從一個(gè)或多個(gè)源對(duì)象復(fù)制到目標(biāo)對(duì)象。它將返回目標(biāo)對(duì)象
方法一:
this.數(shù)據(jù)名 = this.$options.data().數(shù)據(jù)名;//重置某一個(gè)指定的數(shù)據(jù)
方法二:
this. data = this. data = this. data=this.options.data(); //初始化data里面的所有數(shù)據(jù)
方法三:
Object.assign(this. d a t a , t h i s . data, this. data,this.options.data()) //獲取data源對(duì)象,覆蓋當(dāng)前data對(duì)象狀態(tài)

以下是一個(gè)簡(jiǎn)單的例子
未銷毀數(shù)據(jù)的 直接在根元素上使用v-if 只是銷毀了el-dialog組件及其中的數(shù)據(jù) 并沒有銷毀當(dāng)前組件的數(shù)據(jù)
父組件
<template>
<div>
<el-button @click="handleOpen">顯示</el-button>
<el-button @click="handleCls">隱藏</el-button>
<Children ref="children" />
</div>
</template>
<script>
import Children from './children.vue'
export default {
name: 'Father',
components: {
Children
},
props: {
},
data() {
return {
}
},
methods: {
handleOpen() {
this.$refs.children.dialogFormVisible = true
self.console.log(this.$refs.children.dialogFormVisible)
},
handleCls() {
this.$refs.children.dialogFormVisible = false
}
}
}
</script>
<style lang="scss" scoped>
</style>子組件
<template>
<el-dialog v-if="dialogFormVisible" title="收貨地址" :visible.sync="dialogFormVisible">
<el-form :model="form">
<el-form-item label="活動(dòng)名稱" :label-width="formLabelWidth">
<el-input v-model="form.name" autocomplete="off" />
</el-form-item>
<el-form-item label="活動(dòng)區(qū)域" :label-width="formLabelWidth">
<el-select v-model="form.region" placeholder="請(qǐng)選擇活動(dòng)區(qū)域">
<el-option label="區(qū)域一" value="shanghai" />
<el-option label="區(qū)域二" value="beijing" />
</el-select>
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button @click="dialogFormVisible = false">取 消</el-button>
</div>
</el-dialog>
</template>
<script>
export default {
components: {
},
data() {
return {
dialogFormVisible: false,
form: {
name: '',
region: '',
date1: '',
date2: '',
delivery: false,
type: [],
resource: '',
desc: ''
},
formLabelWidth: '120px'
}
}
}
</script>
<style lang="scss" scoped>
</style>顯示效果
第一次填寫數(shù)據(jù)

第二次打開

銷毀數(shù)據(jù)的
父組件
<template>
<div>
<el-button @click="handleOpen">顯示</el-button>
<el-button @click="handleCls">隱藏</el-button>
<Children v-if="dialogShow" ref="children" @handleClose="handleClose" />
</div>
</template>
<script>
import Children from './children.vue'
export default {
name: 'Father',
components: {
Children
},
props: {
},
data() {
return {
dialogShow: false
}
},
methods: {
handleOpen() {
// this.$refs.children.dialogFormVisible = true
this.dialogShow = true
// self.console.log(this.$refs.children.dialogFormVisible)
},
handleCls() {
this.dialogShow = false
// this.$refs.children.dialogFormVisible = false
},
handleClose() {
this.dialogShow = false
}
}
}
</script>
<style lang="scss" scoped>
</style>子組件
<template>
<el-dialog title="收貨地址" :visible="true">
<el-form :model="form">
<el-form-item label="活動(dòng)名稱" :label-width="formLabelWidth">
<el-input v-model="form.name" autocomplete="off" />
</el-form-item>
<el-form-item label="活動(dòng)區(qū)域" :label-width="formLabelWidth">
<el-select v-model="form.region" placeholder="請(qǐng)選擇活動(dòng)區(qū)域">
<el-option label="區(qū)域一" value="shanghai" />
<el-option label="區(qū)域二" value="beijing" />
</el-select>
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button @click="handleClose">取 消</el-button>
</div>
</el-dialog>
</template>
<script>
export default {
components: {
},
data() {
return {
dialogFormVisible: false,
form: {
name: '',
region: '',
date1: '',
date2: '',
delivery: false,
type: [],
resource: '',
desc: ''
},
formLabelWidth: '120px'
}
},
methods: {
handleClose() {
this.$emit('handleClose')
}
}
}
</script>
<style lang="scss" scoped>
</style>顯示效果
第一次填寫

第二次打開數(shù)據(jù)已經(jīng)清空了

到此這篇關(guān)于Vue中data數(shù)據(jù)初始化方法詳解的文章就介紹到這了,更多相關(guān)Vue data數(shù)據(jù)初始化內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
前端Vue3引入高德地圖并展示行駛軌跡動(dòng)畫的步驟
最近在Vue項(xiàng)目中引入高德地圖,實(shí)現(xiàn)地圖展示與交互的方法和技術(shù),這里跟大家分享下,這篇文章主要給大家介紹了關(guān)于前端Vue3引入高德地圖并展示行駛軌跡動(dòng)畫的相關(guān)資料,需要的朋友可以參考下2024-09-09
vue使用拖拽方式創(chuàng)建結(jié)構(gòu)樹
這篇文章主要為大家詳細(xì)介紹了vue使用拖拽方式創(chuàng)建結(jié)構(gòu)樹,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-10-10
Vue中filter使用及根據(jù)id刪除數(shù)組元素方式
這篇文章主要介紹了Vue中filter使用及根據(jù)id刪除數(shù)組元素方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-03-03
解決elementui上傳組件el-upload無(wú)法第二次上傳問(wèn)題
這篇文章主要介紹了解決elementui上傳組件el-upload無(wú)法第二次上傳問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-03-03
解決Vue項(xiàng)目中tff報(bào)錯(cuò)的問(wèn)題
這篇文章主要介紹了解決Vue項(xiàng)目中tff報(bào)錯(cuò)的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-10-10
vue2使用ts?vue-class-component的過(guò)程
vue-property-decorator?是一個(gè)?Vue.js?的裝飾器庫(kù),它提供了一些裝飾器來(lái)讓你在?Vue?組件中定義屬性、計(jì)算屬性、方法、事件等,本文給大家介紹vue2使用ts?vue-class-component的相關(guān)知識(shí),感興趣的朋友一起看看吧2023-11-11
Vue3導(dǎo)航欄組件封裝實(shí)現(xiàn)方法
這篇文章主要為大家詳細(xì)介紹了Vue3導(dǎo)航欄組件封裝的實(shí)現(xiàn)方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-09-09
vue?+?element-ui?季度選擇器組件?el-quarter-picker示例詳解
本文介紹如何在Vue項(xiàng)目中使用基于Element-UI的季度選擇器組件ElQuarterPicker,通過(guò)引用并調(diào)用ElQuarterPicker.vue組件來(lái)實(shí)現(xiàn)季度選擇功能,感興趣的朋友跟隨小編一起看看吧2024-09-09

