返回顶部
首页 > 资讯 > 前端开发 > JavaScript >Vue如何实现MVVM
  • 616
分享到

Vue如何实现MVVM

2024-04-02 19:04:59 616人浏览 独家记忆
摘要

这篇文章主要为大家展示了“Vue如何实现MVVM”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Vue如何实现MVVM”这篇文章吧。本文介绍了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”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注编程网JavaScript频道!

--结束END--

本文标题: Vue如何实现MVVM

本文链接: https://lsjlt.com/news/71750.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Vue如何实现MVVM
    这篇文章主要为大家展示了“Vue如何实现MVVM”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Vue如何实现MVVM”这篇文章吧。本文介绍了Vue的MVVM实现...
    99+
    2024-04-02
  • Vue实现MVVM的方法是什么
    今天小编给大家分享一下Vue实现MVVM的方法是什么的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。1. Object.def...
    99+
    2023-07-04
  • MVVM模型在Vue中如何应用
    本篇内容主要讲解“MVVM模型在Vue中如何应用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“MVVM模型在Vue中如何应用”吧!理解MVVM模型我们知道每一个 Vue 应用都是从创建一个新的实...
    99+
    2023-07-04
  • JS中MVVM组件如何构建Vue组件
    这篇文章将为大家详细讲解有关JS中MVVM组件如何构建Vue组件,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。一、为什么组件很重要前两天,看到一篇关于 汇总vue开源项目...
    99+
    2024-04-02
  • MVC、MVP、MVVM简介;Android应该如何使用MVVM
    背景 目前,android流行的MVC、MVP模式的开发框架很多,然而一款基于MVVM模式开发的项目并不多。我们从当前的技术现状出发,分析下如何...
    99+
    2022-06-06
    MVC mvvm Android
  • 如何实现vue-router
    这篇文章将为大家详细讲解有关如何实现vue-router,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。开始实现想象一下,如果自己实现了一个 vue-router,会怎么去...
    99+
    2024-04-02
  • Vue生命周期和MVVM框架实例分析
    这篇文章主要介绍“Vue生命周期和MVVM框架实例分析”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Vue生命周期和MVVM框架实例分析”文章能帮助大家解决问题。生命周期组件从开始到结束的全过程创建...
    99+
    2023-07-02
  • Vue如何实现日历
    这篇文章主要介绍了Vue如何实现日历,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。组件(component)是Vue最强大的功能之一。组件可...
    99+
    2024-04-02
  • Vue中SSR如何实现
    这篇文章主要为大家展示了“Vue中SSR如何实现”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Vue中SSR如何实现”这篇文章吧。思路Vue 提供了一个官方 D...
    99+
    2024-04-02
  • vue如何实现同步
    本篇内容主要讲解“vue如何实现同步”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“vue如何实现同步”吧!vue实现同步的方法:1、创建一个vue示例文件;2、通过“data(){return ...
    99+
    2023-07-05
  • vue如何实现v-model
    本文小编为大家详细介绍“vue如何实现v-model”,内容详细,步骤清晰,细节处理妥当,希望这篇“vue如何实现v-model”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。为什么使用v-modelv-model...
    99+
    2023-07-04
  • Vue如何实现弹窗Modal
    这篇文章给大家分享的是有关Vue如何实现弹窗Modal的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。Vue作为最近最炙手可热的前端框架,其简单的入门方式和功能强大的API是其优点...
    99+
    2024-04-02
  • Vue如何实现全局loading
    这篇文章将为大家详细讲解有关Vue如何实现全局loading,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。思路我们项目请求使用的是axios,那么我们就在请求前后进行拦截...
    99+
    2024-04-02
  • vue如何实现alert功能
    这篇文章主要介绍了vue如何实现alert功能,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。原生alert的缺点会阻塞一切操作,影响用户体验...
    99+
    2024-04-02
  • Vue如何实现Dialog封装
    本篇内容主要讲解“Vue如何实现Dialog封装”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Vue如何实现Dialog封装”吧!在写业务的时候很常见的一个场景...
    99+
    2024-04-02
  • 如何使用Vue实现todolist
    这篇文章主要介绍了如何使用Vue实现todolist,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。一、使用vue-cli脚手架快速搭建一个框...
    99+
    2024-04-02
  • Vue如何实现模态框
    这篇文章给大家分享的是有关Vue如何实现模态框的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。项目基础工程文件是使用vue-cli3.0搭建的,这里不过多介绍。开发Vue组件系列之...
    99+
    2024-04-02
  • vue如何实现验证码
    这篇文章主要讲解了“vue如何实现验证码”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“vue如何实现验证码”吧!vue实现验证码的方法:1、创建js组件;2、引入组件;3、定义验证对象;4、...
    99+
    2023-06-25
  • vue如何实现选项卡
    这篇文章主要为大家展示了“vue如何实现选项卡”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“vue如何实现选项卡”这篇文章吧。具体内容如下实现步骤实现静态UI效果用传统的方式实现标签结构和样式基...
    99+
    2023-06-29
  • vue如何实现递归槽
    这篇文章主要介绍了vue如何实现递归槽,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。递归槽我们是否可以v-for只使用模板来制作一个组件?在此过程中,我发现了如何递归地使用s...
    99+
    2023-06-27
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作