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

淺談vue中的data與_data的關(guān)系是什么

 更新時間:2023年12月24日 15:53:54   作者:厭世小晨宇yu.  
在Vue實(shí)例中,data屬性是用戶定義的用于存儲數(shù)據(jù)的對象,而_data是Vue內(nèi)部用于存儲數(shù)據(jù)的對象,本文主要介紹了淺談vue中的data與_data的關(guān)系是什么,感興趣的可以了解一下

在 Vue 實(shí)例中,data 屬性是用戶定義的用于存儲數(shù)據(jù)的對象,而 _data 是 Vue 內(nèi)部用于存儲數(shù)據(jù)的對象。它們之間的關(guān)系是 Vue 實(shí)例的 data 屬性實(shí)際上是對 _data 的代理。

當(dāng)你在創(chuàng)建 Vue 實(shí)例時,Vue 會將用戶定義的 data 屬性與內(nèi)部的 _data 對象建立關(guān)聯(lián),并在代理過程中添加一些訪問和觀察的邏輯。這樣,你在訪問 Vue 實(shí)例中的數(shù)據(jù)時實(shí)際上是在訪問 _data 中的數(shù)據(jù)。

下面是一個簡單的示例:

<div id="app">
  <p>{{ message }}</p>
</div>

<script>
const app = new Vue({
  el: '#app',
  data: {
    message: 'Hello Vue!'
  }
});

console.log(app._data.message); // 這里訪問的是內(nèi)部的 _data 對象的數(shù)據(jù)
</script>

在這個示例中,app.data 是用戶定義的數(shù)據(jù),而 app._data 是 Vue 內(nèi)部存儲數(shù)據(jù)的對象。message 屬性實(shí)際上是通過代理從 app._data 中取得的。

需要注意的是,直接訪問 _data 不是 Vue 推薦的做法,因?yàn)?Vue 提供了更高級的 API 來訪問和操作數(shù)據(jù),如計算屬性、觀察屬性等。直接操作 _data 可能繞過 Vue 的響應(yīng)式系統(tǒng),導(dǎo)致數(shù)據(jù)不被正確地追蹤和更新。

下面是一個實(shí)例,直接修改數(shù)組中第一個元素對象的值。

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8" />
		<title>更新時的一個問題</title>
		<script type="text/javascript" src="../js/vue.js"></script>
	</head>
	<body>
		<!-- 準(zhǔn)備好一個容器-->
		<div id="root">
			<h2>人員列表</h2>
			<button @click="updateMei">更新馬冬梅的信息</button>
			<ul>
				<li v-for="(p,index) of persons" :key="p.id">
					{{p.name}}-{{p.age}}-{{p.sex}}
				</li>
			</ul>
		</div>

		<script type="text/javascript">
			Vue.config.productionTip = false
			
			const vm = new Vue({
				el:'#root',
				data:{
					persons:[
						{id:'001',name:'馬冬梅',age:30,sex:'女'},
						{id:'002',name:'周冬雨',age:31,sex:'女'},
						{id:'003',name:'周杰倫',age:18,sex:'男'},
						{id:'004',name:'溫兆倫',age:19,sex:'男'}
					]
				},
				methods: {
                    //注意vm是vue實(shí)例vm._data.student =vm.student ,原理vue的數(shù)據(jù)代理,把vm中的屬性代理到了_data
					updateMei(){
						// this.persons[0].name = '馬老師' //奏效
						// this.persons[0].age = 50 //奏效
						// this.persons[0].sex = '男' //奏效    
						// this.persons[0] = {id:'001',name:'馬老師',age:50,sex:'男'} //失效                      
                        Vue.set(this.persons, 0, {id:'001',name:'馬老師',age:50,sex:'男'})//奏效
						this.persons.splice(0,1,{id:'001',name:'馬老師',age:50,sex:'男'})//奏效
					
                    }
				}
			}) 

		</script>
</html>

上面案例直接修改數(shù)組的第一個元素會失效,原因是Vue把data封裝為_data時做了響應(yīng)式處理(代理),給所有的屬性都加了get和set,類似于Object.defineProperty, 但是這里的直接通過索引整個賦值并不會做響應(yīng)式處理(不會把data數(shù)據(jù)代理到_data),也就導(dǎo)致并不會實(shí)際修改_data,也就是vue的實(shí)際數(shù)據(jù),除非使用Vue.set做響應(yīng)式設(shè)值。

Vue在實(shí)現(xiàn)響應(yīng)式數(shù)據(jù)時,會使用一些特殊的技巧來監(jiān)聽對象的屬性變化,但這些技巧對數(shù)組的處理比較復(fù)雜。Vue能夠檢測到通過索引直接修改數(shù)組元素的情況,因?yàn)閂ue會攔截數(shù)組的變異方法(例如 pushpop、shiftunshift、splice 和 sort),從而能夠在這些方法執(zhí)行時觸發(fā)視圖更新。

然而,直接通過索引賦值的方式修改數(shù)組元素this.persons[0] = {id:'001',name:'馬老師',age:50,sex:'男'},繞過了 Vue 的代理,Vue 無法檢測到這樣的變化,因此不會觸發(fā)視圖更新。

this.persons[0].name = '馬老師' 這種方式可以生效的原因是因?yàn)閚ame是vue實(shí)例的一個屬性,可以觸發(fā)響應(yīng)式代理的更新.也就是會觸發(fā)vue實(shí)例身上為name屬性添加的get與set。

到此這篇關(guān)于淺談vue中的data與_data的關(guān)系是什么的文章就介紹到這了,更多相關(guān)vue data與_data內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 詳解vue 模擬后臺數(shù)據(jù)(加載本地json文件)調(diào)試

    詳解vue 模擬后臺數(shù)據(jù)(加載本地json文件)調(diào)試

    本篇文章主要介紹了詳解vue 模擬后臺數(shù)據(jù)(加載本地json文件)調(diào)試,具有一定的參考價值,有興趣的可以了解一下
    2017-08-08
  • 在Vue中配置代理服務(wù)器的方法詳解

    在Vue中配置代理服務(wù)器的方法詳解

    這篇文章主要給大家介紹了關(guān)于如何在Vue中配置代理服務(wù)器的相關(guān)資料,文中通過圖文以及示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2022-12-12
  • vue實(shí)現(xiàn)豎屏滾動公告效果

    vue實(shí)現(xiàn)豎屏滾動公告效果

    這篇文章主要為大家詳細(xì)介紹了vue實(shí)現(xiàn)豎屏滾動公告效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-04-04
  • vue.js實(shí)現(xiàn)圖片壓縮封裝方法

    vue.js實(shí)現(xiàn)圖片壓縮封裝方法

    這篇文章主要介紹了vue.js實(shí)現(xiàn)圖片壓縮封裝方法,包括全局main.js引入方法,通過引入imgupload方法結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2022-05-05
  • vue動態(tài)綁定多個類名方法詳解(:class動態(tài)綁定多個類名)

    vue動態(tài)綁定多個類名方法詳解(:class動態(tài)綁定多個類名)

    vue中可以通過:class=""這樣來根據(jù)一定的條件來動態(tài)添加class,但是有時候需要判斷的條件比較多,需要動態(tài)添加的class也比較多,下面這篇文章主要給大家介紹了關(guān)于vue動態(tài)綁定多個類名(:class動態(tài)綁定多個類名)的相關(guān)資料,需要的朋友可以參考下
    2022-11-11
  • 深入理解vue-loader如何使用

    深入理解vue-loader如何使用

    本篇文章主要介紹了vue-loader,vue-loader是webpack下loader插件 可以把.vue文件輸出成組件,有興趣的可以了解一下
    2017-06-06
  • vue或react項(xiàng)目生產(chǎn)環(huán)境去掉console.log的操作

    vue或react項(xiàng)目生產(chǎn)環(huán)境去掉console.log的操作

    這篇文章主要介紹了vue或react項(xiàng)目生產(chǎn)環(huán)境去掉console.log的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-09-09
  • vue.js學(xué)習(xí)筆記之v-bind和v-on解析

    vue.js學(xué)習(xí)筆記之v-bind和v-on解析

    這篇文章主要介紹了vue.js學(xué)習(xí)筆記之v-bind和v-on解析,v-bind 指令用于響應(yīng)地更新 HTML 特征,v-on 指令用于監(jiān)聽DOM事件,文中還給大家提到了v-bind,v-on的縮寫,感興趣的朋友參考下吧
    2018-05-05
  • Vue實(shí)現(xiàn)路由跳轉(zhuǎn)至外界頁面

    Vue實(shí)現(xiàn)路由跳轉(zhuǎn)至外界頁面

    這篇文章主要介紹了Vue實(shí)現(xiàn)路由跳轉(zhuǎn)至外界頁面方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • vue開發(fā)移動端h5環(huán)境搭建的全過程

    vue開發(fā)移動端h5環(huán)境搭建的全過程

    在正式使用Vue進(jìn)行移動端頁面開發(fā)前,需要做一些前置工作,下面這篇文章主要給大家介紹了關(guān)于vue開發(fā)移動端h5環(huán)境搭建的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-08-08

最新評論

体育| 岗巴县| 土默特右旗| 蒙自县| 景谷| 嘉祥县| 青河县| 宝丰县| 哈巴河县| 普陀区| 叶城县| 仙游县| 博野县| 韶山市| 沙河市| 汾阳市| 西乌珠穆沁旗| 历史| 抚远县| 花垣县| 瑞丽市| 乐业县| 城市| 桐梓县| 高碑店市| 即墨市| 曲阜市| 应城市| 黄平县| 文山县| 广宁县| 金乡县| 额敏县| 泸水县| 肥乡县| 乳山市| 收藏| 竹溪县| 景泰县| 高州市| 怀柔区|