一.vue双向绑定原理

本文介绍了Vue作为前端MVVM框架的基本概念,详细讲解了如何进行双向数据绑定,包括引入库、实例化Vue对象、作用域设置以及数据绑定的实现。重点探讨了Vue双向绑定的核心——`Object.defineProperty`,解析了其参数含义,包括数据属性和访问器属性的配置选项。
摘要由CSDN通过智能技术生成

文章目录

  • 前言
  • 一、vue简单介绍
  • 二、引入步骤
    • 1.库引入
    • 2.实例化
    • 3.作用域
    • 4.数据绑定


前言

第一天学习vue的双向绑定原理和常用修饰器。


一、vue是什么?

前端开发框架MVVM类,不允许直接操作dom节点,所有的dom节点都为:虚拟dom

二、使用步骤

1.引入库

   <script src="./vue.min.js"></script>

前言2.实例化vue对象

 new Vue({

            // 指定实例对象作用域哪个dom对象上

            el: '#root',

            // 数据模型 -- data

            data: {

                firstName: 'zhang',

                secondName: '',

                age: 16

            }

})

3.作用域

指定实例对象作用域哪个dom对象上

实列对象.$mount('root')   (dom对象id名)

4.数据绑定

指令v-model

三.双向绑定原理

1.对象.defineproperty(1,2,3)的参数介绍

1.第一个为属性所在对象

2.第二个为属性名字

3.一个描述符对象

该方法的第三个参数除了可以是数据属性,也可以是访问器属性 

数据属性

1.configurable:表示能否通过delete删除属性从而重新定义属性,能否修改属性的特性,或者能否把属性修改为访问器属性,默认值为true。

2.enumerable:表示能否通过for in循环访问属性,默认值为true

3.writable:表示能否修改属性的值。默认值为true。

4.value:包含这个属性的数据值。默认值为undefined。

 访问器属性 

1.get:在读取属性时调用的函数,默认值是undefined 

2..set:在写入属性的时候调用的函数,默认值是undefined

<div>
        姓:<input id="inputNode" onchange="inputEvt()"/>
        <!-- 通过修饰符来给v-model指令添加一个增强 如果需要使用一个修饰符: "." + 功能名字即可 -->
        名:<input/>

        <p>
            用户姓名:<span id="showNode"></span>
        </p>

        <div>
            <div>
                <ul>
                    <li id="myNode"></li>
                </ul>
            </div>
        </div>
    </div>

  <script>
        var obj = {
                firstName: 'zhang'
            }

   Object.defineProperty(obj, 'firstName', {
            // get() {
            get: function() {
                // return obj.firstName 引起无限递归
                return document.getElementById('inputNode').value
            },

            set(val) {
                // 给firstName赋值,调用setter方法,进入死循环
                // obj.firstName = val
                render(val)
            }
        })
     function inputEvt() {
            var evt = window.event
            obj.firstName = evt.target.value

            // 不能主动调用方法
            // render()
        }


        function render(val) {

            
            var showNode = document.getElementById('showNode')

            var myNode = document.getElementById('myNode')

            document.getElementById('inputNode').value = val
            showNode.innerText = val
            myNode.innerText = val
           
        }
        
    </script>

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值