Vue(数据绑定、el和data多种写法、理解MVVM、数据代理)

这篇具有很好参考价值的文章主要介绍了Vue(数据绑定、el和data多种写法、理解MVVM、数据代理)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、数据绑定

1. vue中有两种数据绑定(通过开发者工具进行查看)

1. 单项绑定(v-bind)数据只能从data流向页面

在输入框中中输入vue实例中的数据没有变化

Vue(数据绑定、el和data多种写法、理解MVVM、数据代理)


2. 双向绑定(v-model)数据能从data流向页面,也可以从页面流向数据

在输入框中中输入vue实例中的数据也会变化,同样改变之后如果存在单项数据绑定也会把数据传给的那箱数据绑定的输入框

Vue(数据绑定、el和data多种写法、理解MVVM、数据代理)

 文章来源地址https://www.toymoban.com/news/detail-422719.html

 

2. 备注:

1. 双向绑定一般用在表单类元素
2.v-model:value可以写成v-model,因为v-model默认手机的就是value的值

 

二、el和data的多种写法(学习组件前必学)

 1. el(关联语句)的两种写法

  • new的时候配置el属性

  • 先创建Vue实例,通过(vue实例进行容器指向,这里实例名一般就是vm)vm-$mount('#root')指向el的值

  Vue.config.productionTip = false;
    const vm = new Vue({
      // el: "#root",//关联语句(第一种)

      data: { name: "dragon-fly" },
    });
    vm.$mount("#root"); //关联语句(第二种)比较灵活

 2. data的两种写法:组件必须使用普通函数

  • 对象式

     //1. data的第一种写法:对象式
      data: {
        name: "dragon-fly",
      },
  • 函数式:必须存在返回值(模板接收的就是Vue实例中data函数得到返回值)

      // 2.data的第二种写法:函数式(只有函数名函数式)
      data() {
        //注意此处的对象里面写函数可以删除关键词
        console.log("@@@@@@", this); //this指向实例对象(普通函数式子写法,不可以使用箭头函数)
        return {
          name: "dragon-fly",//必须使用返回值把返回值里内容给容器
        };
        // 此处的函数是vue进行调用
      },

注意:由Vue管理的函数,一定不要写箭头函数,一旦写了箭头函数,this就不再是Vue实例了

三、理解MVVM 

1.什么是MVVM模型?

Vue没有完全遵循MVVM模型

Vue(数据绑定、el和data多种写法、理解MVVM、数据代理)

M:模型(model)

data中的数据

V:视图(View)

模板代码

VM:视图模型(ViewMode)

Vue实例

Vue(数据绑定、el和data多种写法、理解MVVM、数据代理)

Vue(数据绑定、el和data多种写法、理解MVVM、数据代理)

 Vue(数据绑定、el和data多种写法、理解MVVM、数据代理)

 

 

2. MVVM模型特点

  •  data中所有的属性,最后都出现在vm身上

  • vm身上所有属性 及Vue原型上所有属性,在Vue模板中都可以直接使用

        <div id="root">
          <h1>学校名称:{{name}}</h1>
          <h1>学校地址:{{address}}</h1>
          <!-- 除了data还有表达式还包括vm所有属性以及Vue原型上的属性都可用 -->
          <!-- 以下就是vm下的属性以及Vue原型上的属性 -->
          <h1>测试1:{{1+1}}</h1>
          <h1>测试2:{{$options}}</h1>
          <h1>测试3:{{ $emit}}</h1>
          <h1>测试4:{{_c}}</h1>
        </div>
        <script>
          Vue.config.production = false;
    
          const vm = new Vue({
            el: "#root",
            data: {
              name: "北大",
              address: "北京",
            },
          });
    
          console.log(vm);
        </script>

四、数据代理

1. 回顾Object.defineProperty(obj,prop,{descriptor})

定义新属性或修改原有属性

 三个参数:进行处理对象,添加或者修改名,{修改值:包含多个属性}

  • value: 值                                 添加或修改的属性值

  • enumerable:false                控制可枚举(默认是false)

  • writable: true                         控制属性可以被修改(默认是false)

  • configurable: true                 控制属性是否可以被删除(默认是false)

  • get(){}

读取当前define属性时候就会调用getter,返回值就是return值

  • set(){}

修改当前define属性时候就会调用setter,得到传入参数就是具体值

    <script>
      let num = 18; 
      let person = {
        name: "张三",
        sex: "男",
      };
    //此处的getter和setter就使用了数据代理
      Object.defineProperty(person, "age", {
             value: 18,
             enumerable: true, //控制属性是是否可枚举
             writable: true, //控制属性可以被修改(默认是false)
             configurable: true, //控制属性是否可以被删除
        // 高级配置项
        // 当有人读取person的age属性的时候,get函数(gatter)就会被调用,并且返回值就是age的值
        get() {
          console.log("有人读取了age属性");
          return num;
        },
        //当有人修改person的age属性,set函数(setter)就会被调用,且会受到修改的具体值
        set(value) {
          console.log("有人修改age值是" + value);
          num = value;
        },
      });
      
      //   以下两种遍历方式
      //   console.log(Object.keys(person)); //直接将一个对象转换成数组的方法
      //   传统遍历对象
      //for (var key in person) {
      //  console.log("@", person[key]);
      // }
       console.log(person);
    </script>

使用对象新增方法实现的一些东西 

Vue(数据绑定、el和data多种写法、理解MVVM、数据代理)

 

Vue(数据绑定、el和data多种写法、理解MVVM、数据代理)

Vue(数据绑定、el和data多种写法、理解MVVM、数据代理)

Vue(数据绑定、el和data多种写法、理解MVVM、数据代理)

Vue(数据绑定、el和data多种写法、理解MVVM、数据代理)

 没有使用对象方法直接添加会存在的一些属性

Vue(数据绑定、el和data多种写法、理解MVVM、数据代理)

Vue(数据绑定、el和data多种写法、理解MVVM、数据代理)

Vue(数据绑定、el和data多种写法、理解MVVM、数据代理)

Vue(数据绑定、el和data多种写法、理解MVVM、数据代理)

2. 什么是数据代理? 

数据代理:通过一个对象对另一个对象中属性的操作(读/写)

  <script>
      let obj = { x: 100 };
      let obj2 = { y: 200 };
      Object.defineProperty(obj2, "x", {
        get() {
          return obj.x;
        },
        set(value) {
          obj.x = value;
        },
      });
    </script>

Vue(数据绑定、el和data多种写法、理解MVVM、数据代理)

 

Vue(数据绑定、el和data多种写法、理解MVVM、数据代理)

 

3. Vue中的数据代理 

  • vue中的数据代理:

通过vm对象来代理data对象中属性的操作(读/写)

  • vue中数据代理的好处:

更方便操作data中的数据

  • 基本原理:

通过object.defineProperty()把data对象中所有属性添加到vm上
为每一个添加到vm的属性,都指定getter/setter
在getter/setter内部操作(读/写)data中的属性
Vue(数据绑定、el和data多种写法、理解MVVM、数据代理)

 

   <div id="root">
      <h2>学校名称:{{name}}</h2>
      <h2>学校地址:{{address}}</h2>
    </div>
    <script>
      Vue.config.production = false;
      let data = {
        name: "xlf",
        address: "高新一路",
      };
      const vm = new Vue({
        el: "#root",
        data,
      });
    </script>
  • 实现检测getter只需要查看vm.name就可以验证

  • 实现setter就需要使用数据源放在vm实例中的一个属性_data

Vue(数据绑定、el和data多种写法、理解MVVM、数据代理)

 

Vue(数据绑定、el和data多种写法、理解MVVM、数据代理)

 

Vue(数据绑定、el和data多种写法、理解MVVM、数据代理)

 

 

 

 

到了这里,关于Vue(数据绑定、el和data多种写法、理解MVVM、数据代理)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Vue框架--理解MVVM

            我们知道, MVVM 是 Model-View-ViewModel 的简写。它本质上就是MVC的改进版。我们看看MVVM的模型架构,如下所示: 架构理解与实例

    2024年02月10日
    浏览(39)
  • vue里el-form+el-table实现验证规则的写法

    重点是因为 使用el-form + el-table 与单独 使用el-form 时 数据不同 ,前者是对象+json数组,后者是对象,导致了 el-form-item绑定prop时的写法不同 以下是el-form+el-table实现验证规则的写法

    2024年02月10日
    浏览(51)
  • 认识Vue;vue使用和安装;声明式和命令式编程;MVVM模型;data属性;methods属性

    Vue (读音 /vjuː/,类似于 view) 是一套用于构建用户界面的渐进式 JavaScript框架。 全称是Vue.js或者Vuejs; 它基于标准 HTML、CSS 和 JavaScript 构建,并提供了一套声明式的、组件化的编程模型; 帮助你高效地开发用户界面,无论任务是简单还是复杂; 渐进式框架? 表示可以在项目

    2024年02月14日
    浏览(43)
  • Vue2和vue3中双向数据绑定的原理,ES6的Proxy对象代理和JavaScript的Object.defineProperty,使用详细

    简介: Object.defineProperty大家都知道,是vue2中双向数据绑定的原理,它 是 JavaScript 中一个强大且常用的方法,用于定义对象属性,允许我们精确地控制属性的行为,包括读取、写入和删除等操作; 而Proxy是vue3中双向数据绑定的原理,是ES6中一种用于创建代理对象的特殊对象,

    2024年02月15日
    浏览(47)
  • 工控视觉项目桌面端WPF源码,UI源码,已实现前后端MVVM数据绑定

    工控视觉项目桌面端WPF源码,UI源码,已实现前后端MVVM数据绑定。 除了两个柱状图用的第三方开源控件,其他都是原生自己写的,非常适合初学者熟悉语法、事件、触发器、MVVM 机制、布局容器,方便二次开发和修改 工控视觉项目桌面端WPF源码,UI源码,已实现前后端MVVM数据

    2024年02月20日
    浏览(45)
  • vue配置代理服务器proxy 多种方法

    在Vue项目中配置代理服务器可以通过以下几种方法实现: 在Vue项目的根目录下创建一个vue.config.js文件,并添加以下代码: 上述代码中,我们使用 devServer 配置项来配置代理服务器。其中 proxy 属性用于配置代理的规则, /api 表示需要代理的接口路径。 target 属性表示代理的目

    2024年02月12日
    浏览(62)
  • Vue+ElementUI el-select选择器:绑定的值为对象

    业务需求: el-select选择器,后台接口需要的参数为name,name会存在重复情况,前端唯一标识选择用id,所以最后决定使用select绑定对象值将数据保存下来。 实现思路: 常规的select选择器,v-model 形式绑定的参数只能是boolean,string,number,但是仔细翻阅官方文档发现,selelct是可以

    2024年02月14日
    浏览(44)
  • vue3和ts的el-input的键盘回车绑定事件

    el-input框绑定键盘回车搜索事件 加上@keyup.enter.native=\\\"search\\\" 然后   第二种方法:作用在input元素身上 在html中 然后

    2024年02月04日
    浏览(46)
  • 微信小程序form页面数据双向绑定data路径

    在开发过程中数据经常以对象方式组织,对页面修改数据进行保存时使用this.data.obj无法获取修改后数据。 1.只能是一个单一字段的绑定 2.目前,尚不能 data 路径,如 这通常不满足我们日常开发需要 通过在input框中设置 name 属性, 然后在函数中使用 e.detail.value 获取form数据 网上

    2024年02月13日
    浏览(45)
  • CommunityToolkit.Mvvm8.1 viewmodel使用-旧式写法(2)

      本系列文章导航 https://www.cnblogs.com/aierong/p/17300066.html https://github.com/aierong/WpfDemo (自我Demo地址)     CommunityToolkit.Mvvm8.1有一个重大更新的功能:源生成器功能,它极大简化我们的mvvm代码 但是本篇先总结一下原写法,下篇再总结源生成器功能   必须继承:ObservableObject   几个关键点

    2023年04月09日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包