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

vue中向data添加新屬性的三種方式小結(jié)

 更新時間:2022年04月20日 14:50:39   作者:a@do?it  
這篇文章主要介紹了vue中向data添加新屬性的三種方式小結(jié),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

向data添加新屬性的三種方式

原理分析

首先在了解這三種方式之前,我覺的有必要說一下,為啥不能直接手動給data中的對象添加屬性呢?

下面咱們一塊分析下:

vue2 是通過數(shù)據(jù)劫持 “Object.defineProperty” 實現(xiàn)數(shù)據(jù)響應(yīng)式;

? ? const obj = {};
? ? ? ? let val = 'kk'
? ? ? ? Object.defineProperty(obj,'name',{
? ? ? ? ? ? get(){
? ? ? ? ? ? ? ? console.log('訪問了')
? ? ? ? ? ? ? ? return val
? ? ? ? ? ? ? ?
? ? ? ? ? ? },
? ? ? ? ? ? set(newval){
? ? ? ? ? ? ? ? if(newval !==val)
? ? ? ? ? ? ? ? val = newval;
? ? ? ? ? ? ? ? ?console.log('設(shè)置',newval)
? ? ? ? ? ? }
? ? ? ? })

在我們訪問或者設(shè)置obj.name的時候,會相繼出發(fā) setter,getter;然而在給obj添加屬性的時候,卻沒有觸發(fā)屬性攔截;

其實上邊的代碼是將obj對象的name屬性設(shè)置成了響應(yīng)式數(shù)據(jù),但是新添加的屬性并沒有通過Object.defineProperty 設(shè)置成響應(yīng)式,所有這就是為什么vue 的data中對象新加屬性頁面無法更新,但是數(shù)據(jù)上卻又我們新加屬性的原因。

三種方式

1.Vue.set()

Vue.set( target, propertyName/index, value ) 參數(shù)
  • {Object | Array} target
  • {string | number} propertyName/index
  • {any} value

返回值:設(shè)置的值

通過Vue.set向響應(yīng)式對象中添加一個property,并確保這個新 property同樣是響應(yīng)式的,且觸發(fā)視圖更新

data() {
? ? return {
? ? ? ? msg:{
? ? ? ? ? ? name:'黑澤明',
? ? ? ? ? ? hero:true
? ? ? ? } ? ?
? ? }
},
methods: {
? ? addProperty(){
? ? ? ? this.$set(this.msg, 'sex', '男')
? ? }
},

2.Object.assign()

直接使用Object.assign()添加到對象的新屬性不會觸發(fā)更新。

應(yīng)創(chuàng)建一個新的對象,合并原對象和混入對象的屬性

? ? data() {
? ? ? ? return {
? ? ? ? ? ? msg:{
? ? ? ? ? ? ? ? name:'黑澤明',
? ? ? ? ? ? ? ? hero:true
? ? ? ? ? ? } ? ?
? ? ? ? }
? ? },
? ?addProperty(){
? ? ? ? ? ? this.msg = Object.assign({},this.msg,{sex:'name'});
? ? ? ? },

3.$forceUpdate

$forceUpdate迫使Vue 實例重新渲染

data() {
? ? return {
? ? ? ? msg:{
? ? ? ? ? ? name:'黑澤明',
? ? ? ? ? ? hero:true
? ? ? ? } ? ?
? ? }
},
addProperty(){
? ? ? ?this.msg.sex = '男';
? ? ? ?this.$forceUpdate()?
? ? },

小結(jié)一下吧:

  • 對象中添加少量的新屬性,可以直接采用Vue.set()
  • 對象中添加多個新屬性,則通過Object.assign()創(chuàng)建新對象
  • 如果你實在不知道怎么操作時,可采取$forceUpdate()進行強制刷新 (不建議)

vue組件 data等屬性介紹

注意:

1.組件中的data屬性的內(nèi)容,必須是一個function類型,并且必須要有返回值。用法跟實例中的data使用是一樣的,同時也有實例化對象的其他屬性如,methods

2.因為如果,不是這里面的對象,而是一個公共的對象實例,可能會出現(xiàn)錯誤。不同的組件如果改變了公共的對象然后返回,對其他組件有影響

HTML代碼:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="../lib/vue.js"></script>
</head>
<body>
     <div id="app">
         <my-com></my-com>
     </div>
     
     <script>
         Vue.component('myCom',{
             template:'<h3>陳小帥是真的帥呢 +++ {{ msg }}</h3>',
             data:function () {
                 return{
                     msg:'組件中的data內(nèi)容'
                 }
             }
         });
         //組件中的data屬性的內(nèi)容,必須是一個function類型,并且必須要有返回值。用法跟實例中的data使用是一樣的,同時也有實例化對象的其他屬性如,methods
         //因為如果,不是這里面的對象,而是一個公共的對象實例,可能會出現(xiàn)錯誤。不同的組件如果改變了公共的對象然后返回,對其他組件有影響
         
         var vm = new Vue({
            el:'#app',
            data:{} 
         });
     </script>
</body>
</html>

效果:

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

相關(guān)文章

  • Vue開發(fā)之封裝分頁組件與使用示例

    Vue開發(fā)之封裝分頁組件與使用示例

    這篇文章主要介紹了Vue開發(fā)之封裝分頁組件與使用,結(jié)合實例形式分析了vue.js封裝分頁組件操作以及使用組件進行分頁的相關(guān)實現(xiàn)技巧,需要的朋友可以參考下
    2019-04-04
  • vue 基于abstract 路由模式 實現(xiàn)頁面內(nèi)嵌的示例代碼

    vue 基于abstract 路由模式 實現(xiàn)頁面內(nèi)嵌的示例代碼

    這篇文章主要介紹了vue 基于abstract 路由模式 實現(xiàn)頁面內(nèi)嵌的示例代碼,幫助大家更好的理解和使用vue框架,感興趣的朋友可以了解下
    2020-12-12
  • vue?echarts實現(xiàn)航班選座案例分析

    vue?echarts實現(xiàn)航班選座案例分析

    這篇文章主要介紹了vue?echarts實現(xiàn)航班選座案例分析,代碼是使用echarts來實現(xiàn)的,主要用到的是svg和自定義地圖的相關(guān)知識,需要的朋友可以參考下
    2022-05-05
  • vue3響應(yīng)式實現(xiàn)readonly從零開始教程

    vue3響應(yīng)式實現(xiàn)readonly從零開始教程

    這篇文章主要為大家介紹了vue3響應(yīng)式實現(xiàn)readonly從零開始教程示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-03-03
  • 在Vue組件上動態(tài)添加和刪除屬性方法

    在Vue組件上動態(tài)添加和刪除屬性方法

    下面小編就為大家分享一篇在Vue組件上動態(tài)添加和刪除屬性方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-02-02
  • vue3如何實現(xiàn)掛載并使用axios

    vue3如何實現(xiàn)掛載并使用axios

    這篇文章主要介紹了vue3如何實現(xiàn)掛載并使用axios,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • 使用vue.js實現(xiàn)聯(lián)動效果的示例代碼

    使用vue.js實現(xiàn)聯(lián)動效果的示例代碼

    本篇文章主要介紹了使用vue.js實現(xiàn)聯(lián)動效果的示例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-01-01
  • Vue3使用mitt進行組件通信的步驟

    Vue3使用mitt進行組件通信的步驟

    這篇文章主要介紹了Vue3使用mitt進行組件通信的步驟,幫助大家更好的理解和學(xué)習(xí)使用vue,感興趣的朋友可以了解下
    2021-05-05
  • vue使用vue-json-viewer插件展示JSON格式數(shù)據(jù)的方法

    vue使用vue-json-viewer插件展示JSON格式數(shù)據(jù)的方法

    這篇文章主要給大家介紹了關(guān)于vue使用vue-json-viewer插件展示JSON格式數(shù)據(jù)的相關(guān)資料,前端使用這個插件可以方便展現(xiàn)出json格式的數(shù)據(jù),下載引入使用代碼可直接使用,需要的朋友可以參考下
    2024-05-05
  • vue3.0項目小白填坑之vue3.0+vite獲取環(huán)境變量

    vue3.0項目小白填坑之vue3.0+vite獲取環(huán)境變量

    Vue3項目使用vite作為打包工具時,環(huán)境變量可以保存在.env文件中,在build時進行解析,這篇文章主要給大家介紹了關(guān)于vue3.0項目小白填坑之vue3.0+vite獲取環(huán)境變量的相關(guān)資料,需要的朋友可以參考下
    2024-03-03

最新評論

太仆寺旗| 皮山县| 子洲县| 新蔡县| 马边| 桂林市| 蕉岭县| 弥勒县| 阿克陶县| 许昌县| 固始县| 甘洛县| 廊坊市| 濮阳市| 武鸣县| 林口县| 沾益县| 泗水县| 安阳市| 翼城县| 德江县| 舟山市| 商城县| 依安县| 保山市| 大关县| 遵化市| 永兴县| 平阴县| 饶河县| 永德县| 富锦市| 延安市| 宜阳县| 昌图县| 花莲市| 黑水县| 利津县| 茂名市| 济宁市| 自贡市|