虽然Vue3.0的时代就要带来啦~~今天就继续复习一下Vue2.0叭(三)

简介: 时代的几步必然会带动科技的发展,科技的发展必将带来新一波编程语言的到来。在今年,个人认为Vue3.0的时代就会到来,现在我们正处于Vue2.0+Vue3.0的时代,今年Vue3.0必将会替代Vue2.0的存在。

1.9.3 键盘事件


1. Vue中常用的按键别名:

  • 回车:enter
  • 删除:delete(注意:这个捕获的是”删除“和“退格”键。删除键不会删除数据,然后显示数据。退格键会删除一位数据然后显示数据。)
  • 退出:esc
  • 空格:space
  • 换行:tab(注意:tab键只能配合 keydown 事件使用。如果配合 keyup 事件,当键盘按下的时候已经失去了对于此DOM对象的焦点。就不会触发这个DOM对象对用的函数。)
  • 上:up
  • 下:down
  • 左:left
  • 右:right

2.绑定键盘的方式

  • Vue未提供别名的按键,可以使用按键原始的key值(key名)去绑定,但是注意转为kebab-case(短横线命名) 例如:转换大小写(Caps键)的名字为:CapsLock,当时使用 @keyup.CapsLock不起效果。 此时需要将其转换为:caps-lock(短横线命名)
  • 系统修饰符(用法特殊):ctrl、alt、shift、meta(win键)(1):配合keyup使用:按下修饰键的同时,在按下其他键(任意键),随后释放其他键,事件才会被触发。(2):配合keydown使用:正常按键触发事件。
  1. 注意事项
  • 对于系统修饰符来说,我们可以指定系统修饰符配合哪个键使用才会生效
    @keyup.ctrl.y : 代表只有点击 ctrl + y 键的时候才会触发这个键盘弹起事件。  点击其他的组合键(ctrl+z、ctrl+t等都不会触发这个键盘弹起事件。)
  • 也可以使用keyCode去指定具体的按键(不推荐)。
  • Vue.config.keyCodes.自定义键名(别名) = 键值,可以定义按键的别名(不推荐 )
  • 键盘上任何一个按键都有键值和键名例如:回车键的键值为 13,键名为 Enter。我们之所以可以使用 @keyup.enter 是因为Vue给我们提供了几个按键的别名,我们可以直接使用。Enter才是回车键的真正名字。
  • 不是所有的按键都可以绑定事件。有些按键连键盘捕获都捕获不到这个按键,比如调整音量大小、亮度等按键。
  • 有一些按键 (.esc 以及所有的方向键) 在 IE9 中有不同的 key 值, 如果你想支持 IE9,这些内置的别名应该是首选。
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>键盘事件</title>
    <script type="text/javascript" src="../../../../../js/vue.js"></script>
</head>
<body>
<!--准备一个容器-->
<div id="root">
    <h2>欢迎来到{{name}}学习</h2><br>
    <input type="text" placeholder="按下键盘触发事件" @keydown.huiche="show($event)">
    <!-- 此时只有点击ctrl+y之后在松开才会触发这个时间函数 -->
    <input type="text" placeholder="按下键盘触发事件" @keyup.ctrl.y="show($event)">
    <!--
        不仅可以应用键名去绑定,还可以通过键值去绑定,但是通过键值的方式不被推荐。
        以为随着键盘布局的不同,他的键值会所有差别。
    -->
    <input type="text" placeholder="按下键盘触发事件" @keyup.13="show($event)">
</div>
<script type="text/javascript">
    Vue.config.productionTip = false;  // 阻止 Vue 在启动时生成生产提示。
    /* 给键盘定义别名 Vue.config.keyCodes.自定义键名(别名) = 键值,可以定义按键的别名*/
    /* 涉及到Vue全局配置的都在Vue对象的外部定义 */
    Vue.config.keyCodes.huiche = 13;
    new Vue({
        el:'#root',
        data:{
            name:'清华大学',
        },
        methods:{
            show(event){
                /*
                    event代表的是:KeyboardEvent 键盘事件
                                 这个键盘事件中有很多的属性,可以通过键盘事件中相应的属性来获取相关的信息。
                    不同的事件调用这个函数传递回来的event事件是不同的。(鼠标单机事件:PointerEvent。键盘事件:KeyboardEvent)
                    event.target 获取的是调用当前函数的DOM对象(input对象)
                    event.target.value <=> DOM.value(调用input标签中的value属性获取对应的value值)
                */
                // 获取键值 使用event.KeyCode,因为keyCode是属于event中的属性。而不是属于event.target中的属性。
                // 而 target也是属于 event中的属性,此时的这个 event.target就是input框。
                // 但是value是属于DOM中的一个属性,此时也就是input框中的value属性。(文本框的值)
                // 所以需要使用 event.target.value来获取这个DOM对象的value值。
                // 以下是用来获取用户点击的 键以及这个键对应的键值。
                console.log(event);
                /* event.key是这个按键的名字,这个名字并不是按键上写的名字(x,y,z,Caps)
                *  这里的名字需要自己获取。
                * */
                console.log(event.key,event.keyCode);
                console.log(event.target.value);
                /*
                * 这里我们给定一个需求:只有当用户按下 enter键的时候才会将DOM对象中的value值打印到控制台。
                *                   enter键的键值为 13
                * 这是以前我们使用JavaScript的方式。
                *
                * 在Vue中国我们只需要在事件的后面加入 事件修饰即可。不使用这种方式。
                * */
/*                if (event.keyCode === 13){
                    console.log(event.target.value);
                }*/
            }
        }
    })
</script>
</body>
</html>
复制代码


2.0 Vue中的数据代理


  1. Vue中的数据代理:通过vm对象来代理data对象中属性的操作。(读/写)
  2. vue中数据代理的好处:更加方便的操作data中的数据
  3. 基本原理:通过Object.defineProperty()把data对象中所有属性添加到vm上。为每一个添加到vm上的属性,指定一个getter/setter。在getter/setter内部取操作(读/写)data中对应的属性。
  4. 在Vue的实列对象vm中,只要数据存在(...)说明一定使用了数据代理。
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Vue中的数据代理</title>
    <!-- 引入Vue的js文件 -->
    <script src="../../../../../js/vue.js"></script>
</head>
<body>
<!--
    1. Vue中的数据代理:
        通过vm对象来代理data对象中属性的操作。(读/写)
    2. vue中数据代理的好处:
        更加方便的操作data中的数据
    3. 基本原理:
        通过Object.defineProperty()把data对象中所有属性添加到vm上。
        为每一个添加到vm上的属性,指定一个getter/setter。
        在getter/setter内部取操作(读/写)data中对应的属性。
    4. 在Vue的实列对象vm中,只要数据存在(...)说明一定使用了数据代理。
-->
    <!--给定一个容器,也就是MVVM中的V(view)-->
    <div id="root">
        <!--
            此时data中的数据全部存储到了vm的 _data中。
            并且没有发生动态代理,只是简单的将data中的数据复制一份存储到 _data 中
            以前在模板语法中讲过,只要是vm中的数据,都可以直接使用 {{xxx}} 直接获取。
            此时的 _data 在vm中,并且_data 中存在name属性值。
            所以说,如果不使用数据代理完全可以获取到data中的值。
        -->
        学校名称:{{_data.name}} <br/>
        <!--
            当我们把 name、address直接存储到 vm 中的时候才发生了Vue的数据代理
            相当于我们将 vm中的_data中的数据复制一份传递给vm对象,此时vm中的name、address
            就代理了 _data中的name与address。这个地方才发生了数据代理。
            就是将 vm(name、address)代理了_data(name,address),此时使用的就是:Object.defineProperty
            之所以使用数据代理,是为了使我们的开发更加方便。就不用使用 {{_data.name}}的方式。
            并且当我们存储完这个两个数据的时候,在vm中会自动生成 getter/setter 方法
            当在页面中取出data中的数据的时候会调用 getter 方法。
            当在网页上修改数据的时候,会自动调用setter方法修改data中的数据。
            并且这个getter/setter直接操作的是vm中的_data,而不是data。
            通过_data改变data中的数据。
            _data.name <==> name
        -->
        学校地点:{{address}}
    </div>
    <script type="text/javascript">
        /*定义一个MVVM中的vm(视图模型),也就是Vue对象*/
        const vm = new Vue({
            el:"#root",
            /*
                这个data中的数据会存储到vm中的 _data属性中。此时还没有发生动态代理。
                只是单纯的把 data中的数据赋值给了 vm中_data。
            */
            data:{
                name:'清华大学',
                address:'北京大兴区'
            }
        })
    </script>
</body>
</htm



相关文章
|
JavaScript 前端开发 测试技术
Vue知识系列(1)每天10个小知识点
Vue知识系列(1)每天10个小知识点
68 0
|
缓存 JavaScript 前端开发
Vue知识系列(6)每天10个小知识点(一)
Vue知识系列(6)每天10个小知识点
73 0
|
1月前
|
JavaScript
vue知识点
10月更文挑战第2天
35 3
|
22天前
|
API
vue3知识点:shallowReactive 与 shallowRef
vue3知识点:shallowReactive 与 shallowRef
23 2
|
5月前
|
JavaScript
Vue的小知识点
Vue的小知识点
|
6月前
|
JavaScript
Vue常用知识点总结
Vue常用知识点总结
36 0
|
缓存 JavaScript 前端开发
总结vue 需要掌握的知识点
总结vue 需要掌握的知识点
49 0
|
6月前
|
JavaScript 前端开发 API
vue面试题目汇总
vue面试题目汇总
94 4
|
前端开发 JavaScript API
vue3知识点(一)
vue3知识点(一)
96 0
|
6月前
|
Web App开发 移动开发 前端开发