Vue学习计划-Vue2--Vue核心(二)Vue代理方式

news/2025/2/19 8:05:05/

Vue

  1. data中的两种方式

    1. 对象式
    data:{}
    
    1. 函数式
    data(){return {}
    }
    

    示例:

    <body><div id="app">{{ name }} {{ age}} {{$options}}<input type="text" v-model="value"></div><script>let vm = new Vue({el: '#app',// 对象式// data:{//   name: '小红',//   age: 16// }// 函数式data(){return {name: '小明',age: 55,value: '111'}}})</script></body>
    
  2. el中的两种方式

    1. new Vue时候配置 el 属性
    const vm = new Vue({el: '#root'
    })
    
    1. 先创建Vue实例,随后再通过 vm.$mount(‘#root’)指定el的值(这种方式更加灵活)
    const vm = new Vue({})
    vm.$mount('#root')
    

    示例:

    <body><div id="app">{{ name }}</div><script>//el的两种方式// let vm = new Vue({//   // el:'#app',//   data:{//     name: '小红'//   }// })let vm = new Vue({data:{name: '小红'}})// 这种方式更加灵活,比如加个定时器setTimeout(()=>{vm.$mount('#app')}, 3000)</script></body>
    
  3. MVVM模型 vue受到mvvm模型的启发

    1. M: 模型(Model): data的数据
    2. V: 视图(View): 模板代码
    3. VM: 视图模型(ViewModel): Vue实例对象(核心)

    ViewModel 包含 DOM Listeners 和 Data Bindings。Data Bindings 用于将数据绑定到 View 上显示,DOM Listeners 用于监听操作。

    • 从 Model 到 View 的映射,也就是 Data Bindings 。这样可以大量省略我们手动 update View 的代码和时间。
    • 从 View 到 Model 的事件监听,也就是 DOM Listeners 。这样我们的 Model 就会随着 View 触发事件而改变。
        <p>{{ name }}</p> // 改变data中的数据,页面随之变化<input type="text" v-model="name"> //改变input的value值,data中的值也变化
    

    在这里插入图片描述

    在Vue中的mvvm:

    • data中所有的属性、computed的计算属性、methods中的方法等,最后都出现在了vue实例vm身上。
    • vue实例vm身上所有的属性 及 Vue原型上所有属性,在Vue模板{{}}中都可以直接使用。
  4. 数据代理:

    问题:{{}} 为什么可以访问vm实例上的所有属性|data里的数据为什么会出现在vm身上

    1. 先认识一个方法:Object.defineProperty(obj,prop, options):
      1:作用:就是直接在一个对象上定义一个新属性,或者修改一个已经存在的属性
      2. 接收三个参数:
      obj 需要定义属性的当前对象
      prop 当前需要定义的属性名
      options:属性配置
      3. 这个方法有缺点:现在先点一下:
      1. 不能监听数组的变化
      2. 不能监听新属性的添加
      3. 兼容性问题
      4. 不能深度监听
      示例:
    let num = 300
    let person = {name: '小明',sex: '男'
    }
    Object.defineProperty(person, 'age', {//value: 15,//enumerable: true, // 控制属性是否可以枚举, 默认false//writable: true, // 控制属性是否可以被修改,默认false//configurable: true, // 控制属性是否可以被删除,默认false// 当有人读取person的age属性时,get函数(getter)就会被调用,且返回值是age的值// 注意:不能同时指定访问器和值或可写属性,什么意思呢,就是上面的配置和下面的get、set不可同时存在get(){console.log('有人读取了age属性')return number}// 当有人修改person的age属性时,set函数(setter)就会被调用,且会收到修改的具体指set(value){console.log('有人修改了age属性')number = value}
    })
    
    1. 数据代理: 通过一个对象代理对另一个对象中属性的操作(读/写),可以在控制台做两个操作:
      • 输出一下obj,obj2,和obj2.x,并且把obj2输出后的对象展开一下
      • 更改一下obj2.x并输出一下obj
    let obj = {x: 100}
    let obj2 = {y: 200}
    Object.defineProperty(obj2, 'x', {get(){return obj.x},set(value){obj.x = value}
    })
    
    1. Vue中的数据代理:通过vm对象来代理data对象中的属性的操作(读/ 写)
    1. 好处:
      更加方便操作data中的数据
    2. 基本原理:
      通过Object.defineProperty()把data对象中所有的属性添加到vm上
      为每一个添加到vm上的属性,都指定一个getter/setter
      在getter/setter内部去操作(读/写)data中对应的属性
      在这里插入图片描述

http://www.ppmy.cn/news/1259700.html

相关文章

ApplicationContextAware 类

优质博文&#xff1a;IT-BLOG-CN 需求&#xff1a; 使用autowired注入一些对象&#xff0c;但发现不可以直接使用Autowired&#xff0c;因为方法是static的&#xff0c;要使用该方法当前对象也必须是static&#xff0c;正常情况下Autowired无法注入静态的bean&#xff0c;于是…

Splashtop 荣获 SDC“年度安全供应商”奖

2023年12月5日 荷兰阿姆斯特丹 Splashtop 是随处办公环境改革的先驱&#xff0c;在伦敦举办的第14届 SDC 颁奖典礼上荣获“年度安全供应商”奖&#xff0c;我们对此感到十分自豪。荣获这一知名奖项凸显了 Splashtop 致力于通过企业级加密和基于权限的访问保护不同规模组织的决…

python进行文件批量命名

目录 1、传递需要修改文件的上一级目录root_path&#xff0c;step的作用是生成不同的文件&#xff0c;convert_format是转化为特定的格式 2、代码使用 1、传递需要修改文件的上一级目录root_path&#xff0c;step的作用是生成不同的文件&#xff0c;convert_format是转化为特…

Nashorn 简介

1. 引言 本文重点介绍 Nashorn – 从 Java 8 开始&#xff0c;JVM 的新默认 JavaScript 引擎。 许多复杂的技术已被用于使 Nashorn 的性能比其前身 Rhino 高出几个数量级&#xff0c;因此这是一个值得的改变。让我们来看看它的一些使用方式。 本文大部分内容翻译自&#xff1…

SAP CA01/CA02 创建及更新工艺路线BAPI

前言 最近需要做一个routing的批导&#xff0c;初步查过资料后&#xff0c;发现下面几个BAPI: BAPI_ROUTING_CREATE&#xff1a;最常用的BAPI&#xff0c;只支持创建&#xff0c;没有对应的CHANGE BAPI&#xff1b; ROUTING_MAINTAIN&#xff1a;不支持创建&#xff0c;只支…

flink源码分析之功能组件(四)-slot管理组件I

简介 本系列是flink源码分析的第二个系列&#xff0c;上一个《flink源码分析之集群与资源》分析集群与资源&#xff0c;本系列分析功能组件&#xff0c;kubeclient&#xff0c;rpc&#xff0c;心跳&#xff0c;高可用&#xff0c;slotpool&#xff0c;rest&#xff0c;metrics&…

书-用数组存储高于60低于70的人单独存起来

#include<stdio.h> # define N 10 //书-用数组存储高于60低于70的人单独存起来 int main(){float s[N]{68.2,62.3,63.4,34.5,45.6,56.7,67.8,78.9,89.0,100};int i;float diyu[100];int j0;for(i0;i<N;i){if(s[i]>60 && s[i]<70)diyu[j]s[i];//这里的范…

【408】计算机学科专业基础 - 计算机组成原理

一、计算机系统概述 【复习提示】 本章是组成原理的概述&#xff0c;考查时易针对有关概念或性能指标出选择题&#xff0c;也可能综合后续章节的内容出有关性能分析的综合题。掌握本章的基本概念&#xff0c;是学好后续章节的基础。部分知识点在初学时理解不深刻也无须担忧&am…