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

一、数据绑定

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

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

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


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

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

 

 

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模型

M:模型(model)

data中的数据

V:视图(View)

模板代码

VM:视图模型(ViewMode)

Vue实例

 

 

 

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>

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

 

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

2. 什么是数据代理? 

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

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

 

 

3. Vue中的数据代理 

  • vue中的数据代理:

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

  • vue中数据代理的好处:

更方便操作data中的数据

  • 基本原理:

通过object.defineProperty()把data对象中所有属性添加到vm上
为每一个添加到vm的属性,都指定getter/setter
在getter/setter内部操作(读/写)data中的属性

 

   <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

 

 

 

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
基于Vue数据绑定的数字时钟是一种利用Vue框架实现的动态显示时间的时钟。通过Vue数据绑定机制,可以实时更新时钟的显示内容,使其能够自动更新。 实现基于Vue数据绑定的数字时钟的步骤如下: 1. 创建一个Vue实例,并定义一个data属性来存储当前时间。 2. 使用Vue的生命周期钩子函数created,在实例创建完成后,通过JavaScript的Date对象获取当前时间,并将其保存在data属性中。 3. 在Vue的模板中,使用双花括号语法(Mustache语法)将data属性中的时间值绑定到页面上,实现实时显示。 4. 使用JavaScript的定时器函数setInterval,每秒更新一次data属性中的时间值,从而实现时钟的动态更新。 下面是一个简单的示例代码: ```html <!DOCTYPE html> <html> <head> <title>Vue数字时钟</title> <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script> </head> <body> <div id="clock"> <h1>{{ currentTime }}</h1> </div> <script> new Vue({ el: '#clock', data: { currentTime: '' }, created: function() { this.updateTime(); setInterval(this.updateTime, 1000); }, methods: { updateTime: function() { var date = new Date(); var hours = date.getHours(); var minutes = date.getMinutes(); var seconds = date.getSeconds(); this.currentTime = hours + ':' + minutes + ':' + seconds; } } }); </script> </body> </html> ``` 通过上述代码,我们可以实现一个基于Vue数据绑定的数字时钟。每秒钟,时钟会自动更新显示当前的时间。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值