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

Vue的MVVM實(shí)現(xiàn)方法

 更新時間:2017年08月16日 16:59:25   作者:sunny519111  
本篇文章主要主要介紹了Vue的MVVM實(shí)現(xiàn)方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

本文介紹了Vue的MVVM實(shí)現(xiàn)方法,分享給大家,具體如下:

1. Object.defineProperty() 定義屬性

用意:給一個對象定義屬性,那個屬性原來是不存在的。這是一個初衷,屬性是不存在的,需要額外添加。

①、使用說明

Object.defineProperty(obj,props)

第一個參數(shù)是將被添加或者修改的屬性的對象

第二個參數(shù)是一個對象,表示將要添加的一個或多個鍵值對一直要添加屬性的具體配置

{

​ '屬性名':{value:'...',writable:true},

​ '屬性名':{value:'...',writable:true}

}

②、屬性的getter和setter

  • 一般用于局部變量
  • 給構(gòu)造函數(shù)添加屬性
// get和set的方法不能和value以及writable一起使用
var o ={},
Object.defineProperty(o,'p',{
 get(){
   console.log('調(diào)用屬性后輸出')
 },
   set(val){
   console.log(val+'賦值屬性的時候調(diào)用')
   }
})
o.p // '調(diào)用屬性后輸出'
o.p = 'hcc' //hcc賦值屬性的時候調(diào)用
// 可以根據(jù)Object.getOwnPropertyDescriptor(對象, '屬性名')得到相應(yīng)的屬性配置

// 需求
//給一個對象的屬性值不能超過30,超過30的按照30來算
var hcc = {} //全局對象
{
 var age = null //局部變量
 Object.defineProperty(hcc,'age',{
   get(){
     return age //設(shè)置hcc.age的值
   },
   set(val){
     age= val> 30?30:val //當(dāng)賦值給hcc.age的值進(jìn)行判定從而改變局部變量age的值 
   }  
 })
}

③、使用場景

  // 簡單的給元素添加屬性
  var obj = {name:'hcc'}
  Object.defineProperties(obj,{
   'name':{value:'haaaaa',writable:true},
   'age':{value:24,writable:false}
  })

細(xì)節(jié)

今天樓主上午在思考,一般使用Object.defineProperty()為什么需要使用局部變量呢?

所有樓主就下了下面的代碼

var obj = {}
Object.defineProperty(obj,'a',{
 get() {
  return 'gg';
 },
 set(value) {
  obj.a = value;
 }
})

解析: 為什么會出現(xiàn)堆溢棧呢 ? 我們在調(diào)用 obj.a = 'ff' 的時候,觸發(fā)了set()方法,從而執(zhí)行了obj.a = value,又給obj.a進(jìn)行了賦值,調(diào)用set()方法,進(jìn)入了死循環(huán)。

總結(jié): 所以我們在使用Object.defineProperty()的時候,都是通過一個私有變量或者一個局部變量來實(shí)現(xiàn)對象的屬性的賦值和設(shè)置。

// 局部變量,以一個變量為軀殼,設(shè)置返回值。
const obj = {}
{
 let bValue;
 Object.defineProperty(obj,'a',{
  get(){
   return bValue
  },
  set(value) {
   bValue = value;
  }
})
}
// 私有變量
const obj = {
 _data: {
  a: null
 }
}
Object.defineProperty(obj,'a', {
 get() {
  return obj._data.a
 },
 set(value) {
  obj._data.a = value
 }
})

總結(jié): Vue中進(jìn)行雙向綁定就是通過私有變量data實(shí)現(xiàn)的。是不是和Vue的結(jié)構(gòu)很相似。

實(shí)現(xiàn)Vue的雙向綁定

  • 實(shí)現(xiàn)改變元素的值的時候,dom進(jìn)行相應(yīng)的更新數(shù)據(jù)。
  • dom的值進(jìn)行更新的時候,元素的值同時也改變。

html部分

<div class="forms">
 <span>姓名</span> <input type='text' name="name">
 <span>年齡</span> <input type='text' name="age">
</div>

js部分

// 改變input的值得同時obj的值改變
const obj = {
 _data: {
  name: null,
  age: null
 }
}
const nameInput = document.querySelector('input[name]')
nameInput.addEventListener('input', (e) => {
  obj._data.name = e.target.value;
})
Object.definePeoperty(obj,'a',{
 get() {
  return obj._data.name
 },
 set(value) {
  nameInput.value = value;
  obj._data.name = value;
 }
})

// 簡化
function bind(obj,dom) {
 let name = dom.getAttribute('name');
 Object.defineProperty(obj,name,{
  get() {
   return obj._data[name]
  },
  set(value) {
   dom.value = value;
   obj._data[name] = value;
  }
 })
 dom.addEventListener('input', (e) => {
  obj._data[name] = e.target.value;
 })
}
bind(obj,document.querySelector('input[name=name]'))
bind(obj,document.querySelector('input[name=age]'))


缺點(diǎn): 必須要事先的綁定dom。是不是和Vue里面的很想,必須事先申明data中的數(shù)據(jù),如果需要額外的添加數(shù)據(jù)的時候,必須通過Vue.set()來申明。

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Vue對Element中的el-tag添加@click事件無效的解決

    Vue對Element中的el-tag添加@click事件無效的解決

    本文主要介紹了Vue對Element中的el-tag添加@click事件無效的解決,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-05-05
  • 解決elementUI 切換tab后 el_table 固定列下方多了一條線問題

    解決elementUI 切換tab后 el_table 固定列下方多了一條線問題

    這篇文章主要介紹了解決elementUI 切換tab后 el_table 固定列下方多了一條線問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-07-07
  • vue中如何實(shí)時監(jiān)聽本地存儲

    vue中如何實(shí)時監(jiān)聽本地存儲

    這篇文章主要介紹了vue中如何實(shí)時監(jiān)聽本地存儲,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-04-04
  • vue中的面包屑導(dǎo)航組件實(shí)例代碼

    vue中的面包屑導(dǎo)航組件實(shí)例代碼

    這篇文章主要介紹了vue的面包屑導(dǎo)航組件,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-07-07
  • vue實(shí)現(xiàn)底部彈窗多選

    vue實(shí)現(xiàn)底部彈窗多選

    這篇文章主要為大家詳細(xì)介紹了vue實(shí)現(xiàn)底部彈窗多選,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • vue src動態(tài)加載請求獲取圖片的方法

    vue src動態(tài)加載請求獲取圖片的方法

    這篇文章主要為大家詳細(xì)介紹了vue src動態(tài)加載請求獲取圖片的方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-10-10
  • 微信小程序使用uni-app一鍵獲取用戶信息

    微信小程序使用uni-app一鍵獲取用戶信息

    這篇文章主要介紹了微信小程序使用uni-app一鍵獲取用戶信息,需要的朋友可以參考下
    2023-01-01
  • vue.js仿hover效果的實(shí)現(xiàn)方法示例

    vue.js仿hover效果的實(shí)現(xiàn)方法示例

    這篇文章主要介紹了vue.js仿hover效果的實(shí)現(xiàn)方法,結(jié)合實(shí)例形式分析了vue.js事件響應(yīng)及頁面元素屬性動態(tài)操作相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2019-01-01
  • vue父子組件通訊的所有方法小結(jié)

    vue父子組件通訊的所有方法小結(jié)

    本文將介紹父組件與子組件之間傳遞數(shù)據(jù)的四種方法,以一個簡單的小demo為例,通過實(shí)例全方位解析和代碼演示,便于大家理解,需要的朋友可以參考下
    2024-07-07
  • Vue.js中的computed工作原理

    Vue.js中的computed工作原理

    這篇文章,我們通過實(shí)現(xiàn)一個簡單版的和Vue中computed具有相同功能的函數(shù)來了解computed是如何工作的。對Vue.js中的computed工作原理感興趣的朋友跟隨腳本之家小編一起學(xué)習(xí)吧
    2018-03-03

最新評論

贡嘎县| 文水县| 武冈市| 股票| 德阳市| 府谷县| 菏泽市| 封开县| 兴仁县| 浦北县| 和平县| 古蔺县| 紫金县| 广昌县| 通州市| 安国市| 河北省| 永昌县| 高州市| 黑山县| 子洲县| 揭阳市| 汝城县| 固镇县| 泗洪县| 且末县| 临颍县| 始兴县| 吴江市| 五华县| 海淀区| 桐柏县| 中西区| 常熟市| 堆龙德庆县| 长葛市| 南京市| 惠东县| 邯郸市| 乐清市| 雅安市|