欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

本文介紹了Vue的MVVM實現(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(對象, '屬性名')得到相應的屬性配置

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

③、使用場景

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

細節(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進行了賦值,調(diào)用set()方法,進入了死循環(huán)。

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

// 局部變量,以一個變量為軀殼,設置返回值。
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中進行雙向綁定就是通過私有變量data實現(xiàn)的。是不是和Vue的結(jié)構(gòu)很相似。

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

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

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]'))


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

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

相關(guān)文章

  • vue computed計算屬性顯示undefined的解決

    vue computed計算屬性顯示undefined的解決

    這篇文章主要介紹了vue computed計算屬性顯示undefined的解決方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • Vue在頁面右上角實現(xiàn)可懸浮/隱藏的系統(tǒng)菜單

    Vue在頁面右上角實現(xiàn)可懸浮/隱藏的系統(tǒng)菜單

    這篇文章主要介紹了Vue在頁面右上角實現(xiàn)可懸浮/隱藏的系統(tǒng)菜單,實現(xiàn)思路大概是通過props將showCancel這個Boolean值傳遞到子組件,對父子組件分別綁定事件,來控制這個系統(tǒng)菜單的顯示狀態(tài)。需要的朋友可以參考下
    2018-05-05
  • Vue的自定義組件不能使用click方法的解決

    Vue的自定義組件不能使用click方法的解決

    這篇文章主要介紹了Vue的自定義組件不能使用click方法的解決,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-07-07
  • el-table樹形表格表單驗證(列表生成序號)

    el-table樹形表格表單驗證(列表生成序號)

    這篇文章主要介紹了el-table樹形表格表單驗證(列表生成序號),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-05-05
  • vue3?setup語法糖中獲取slot插槽的dom對象代碼示例

    vue3?setup語法糖中獲取slot插槽的dom對象代碼示例

    slot元素是一個插槽出口,標示了父元素提供的插槽內(nèi)容將在哪里被渲染,這篇文章主要給大家介紹了關(guān)于vue3?setup語法糖中獲取slot插槽的dom對象的相關(guān)資料,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2024-04-04
  • 輕松理解vue的雙向數(shù)據(jù)綁定問題

    輕松理解vue的雙向數(shù)據(jù)綁定問題

    Vue是當前很火的一款MVVM的輕量級框架,它是以數(shù)據(jù)驅(qū)動和組件化的思想構(gòu)建的。因為它提供了簡潔易于理解的api,使得我們很容易上手。這篇文章給大家介紹了vue雙向數(shù)據(jù)綁定問題,感興趣的朋友一起看看吧
    2017-10-10
  • vue底部加載更多的實例代碼

    vue底部加載更多的實例代碼

    本文通過實例代碼給大家介紹了vue底部加載更多,代碼簡單易懂,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2018-06-06
  • vue項目實現(xiàn)按鈕可隨意移動

    vue項目實現(xiàn)按鈕可隨意移動

    這篇文章主要為大家詳細介紹了vue項目實現(xiàn)按鈕可隨意移動,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • vuejs前后端數(shù)據(jù)交互之從后端請求數(shù)據(jù)的實例

    vuejs前后端數(shù)據(jù)交互之從后端請求數(shù)據(jù)的實例

    今天小編就為大家分享一篇vuejs前后端數(shù)據(jù)交互之從后端請求數(shù)據(jù)的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-08-08
  • 詳解Vuex下Store的模塊化拆分實踐

    詳解Vuex下Store的模塊化拆分實踐

    這篇文章主要介紹了詳解Vuex下Store的模塊化拆分實踐,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-07-07

最新評論