我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Vue如何实现MVVM

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Vue如何实现MVVM

这篇文章主要为大家展示了“Vue如何实现MVVM”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Vue如何实现MVVM”这篇文章吧。

本文介绍了Vue的MVVM实现方法,分享给大家,具体如下:

1. Object.defineProperty() 定义属性

用意:给一个对象定义属性,那个属性原来是不存在的。这是一个初衷,属性是不存在的,需要额外添加。

①、使用说明

Object.defineProperty(obj,props)

第一个参数是将被添加或者修改的属性的对象

第二个参数是一个对象,表示将要添加的一个或多个键值对一直要添加属性的具体配置

{

'属性名':{value:'...',writable:true},

'属性名':{value:'...',writable:true}

}

②、属性的getter和setter

  • 一般用于局部变量

  • 给构造函数添加属性

// get和set的方法不能和value以及writable一起使用
var o ={},
Object.defineProperty(o,'p',{
 get(){
   console.log('调用属性后输出')
 },
   set(val){
   console.log(val+'赋值属性的时候调用')
   }
})
o.p // '调用属性后输出'
o.p = 'hcc' //hcc赋值属性的时候调用
// 可以根据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}
  })

细节

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

所有楼主就下了下面的代码

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

解析: 为什么会出现堆溢栈呢 ? 我们在调用 obj.a = 'ff' 的时候,触发了set()方法,从而执行了obj.a = value,又给obj.a进行了赋值,调用set()方法,进入了死循环。

总结: 所以我们在使用Object.defineProperty()的时候,都是通过一个私有变量或者一个局部变量来实现对象的属性的赋值和设置。

// 局部变量,以一个变量为躯壳,设置返回值。
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
 }
})

总结: Vue中进行双向绑定就是通过私有变量data实现的。是不是和Vue的结构很相似。

实现Vue的双向绑定

  • 实现改变元素的值的时候,dom进行相应的更新数据。

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

Vue如何实现MVVM

缺点: 必须要事先的绑定dom。是不是和Vue里面的很想,必须事先申明data中的数据,如果需要额外的添加数据的时候,必须通过Vue.set()来申明。

以上是“Vue如何实现MVVM”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注编程网行业资讯频道!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Vue如何实现MVVM

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Vue实现MVVM的方法是什么

今天小编给大家分享一下Vue实现MVVM的方法是什么的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。1. Object.def
2023-07-04

MVVM模型在Vue中如何应用

本篇内容主要讲解“MVVM模型在Vue中如何应用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“MVVM模型在Vue中如何应用”吧!理解MVVM模型我们知道每一个 Vue 应用都是从创建一个新的实
2023-07-04

MVC、MVP、MVVM简介;Android应该如何使用MVVM

背景 目前,android流行的MVC、MVP模式的开发框架很多,然而一款基于MVVM模式开发的项目并不多。我们从当前的技术现状出发,分析下如何使用MVVM。 Android框架的发展史 一、MVC模式1、简介 MVC(Model View
2022-06-06

Vue生命周期和MVVM框架实例分析

这篇文章主要介绍“Vue生命周期和MVVM框架实例分析”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Vue生命周期和MVVM框架实例分析”文章能帮助大家解决问题。生命周期组件从开始到结束的全过程创建
2023-07-02

vue如何实现同步

本篇内容主要讲解“vue如何实现同步”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“vue如何实现同步”吧!vue实现同步的方法:1、创建一个vue示例文件;2、通过“data(){return
2023-07-05

vue如何实现v-model

本文小编为大家详细介绍“vue如何实现v-model”,内容详细,步骤清晰,细节处理妥当,希望这篇“vue如何实现v-model”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。为什么使用v-model?v-mode
2023-07-04

Vue如何实现router传参

本文小编为大家详细介绍“Vue如何实现router传参”,内容详细,步骤清晰,细节处理妥当,希望这篇“Vue如何实现router传参”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。vue-router 参数传递的方
2023-07-04

vue如何实现验证码

这篇文章主要讲解了“vue如何实现验证码”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“vue如何实现验证码”吧!vue实现验证码的方法:1、创建js组件;2、引入组件;3、定义验证对象;4、
2023-06-25

vue如何实现递归槽

这篇文章主要介绍了vue如何实现递归槽,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。递归槽我们是否可以v-for只使用模板来制作一个组件?在此过程中,我发现了如何递归地使用s
2023-06-27

vue如何实现选项卡

这篇文章主要为大家展示了“vue如何实现选项卡”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“vue如何实现选项卡”这篇文章吧。具体内容如下实现步骤实现静态UI效果用传统的方式实现标签结构和样式基
2023-06-29

vue如何实现转换id

这篇文章主要介绍“vue如何实现转换id”,在日常操作中,相信很多人在vue如何实现转换id问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”vue如何实现转换id”的疑惑有所帮助!接下来,请跟着小编一起来学习吧
2023-07-04

编程热搜

目录