侧边栏壁纸
博主头像
Charlie_QAQ_blog博主等级

行动起来,活在当下

  • 累计撰写 8 篇文章
  • 累计创建 20 个标签
  • 累计收到 2 条评论

目 录CONTENT

文章目录

VUE从入门到入土(一)

Administrator
2023-08-18 / 0 评论 / 0 点赞 / 60 阅读 / 13474 字
温馨提示:
本文最后更新于 2023-08-19,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

本文参考尚硅谷Vue2.0+Vue3.0全套教程
VUE从入门到入土 (一) 当中 包括 VUE基础当中的 初识VUE、VUE模板语法、数据绑定、el与data的两种写法、MVVM模型、数据代理、事件处理

初识VUE

  1. 一个容器对应一个实例(一对一)
  2. 想让Vue工作,就必须创建一个Vue实例
  3. 3.root容器里的代码被称为 Vue模板
			new Vue({
			    el: '.root',
			    data: {
			        name: 'myname',
			        address: 'beijing'
			    }
			})

vue实例中的参数

el

el用于指定当前Vue实例为哪个容器服务,值通常为css选择器字符串

创建vue实例时配置el

const v = new Vue({
    el: '#root',
    data: {
        name: 'myname'
    }
})

挂载el属性

const v = new Vue
v.$mount('#root')

data

data中用于存储数据,数据供el所指定的容器去使用

对象式

new Vue({
    el: '#root',
    data: {
        name: 'myname'
    }
})

函数式

new Vue({
    el: '#root',
    data() {
        console.log('@@@', this) //此处的this是Vue实例对象,data不能用使用箭头函数
        return {
            name: 'myname'
        }
    }
})

Vue模板语法

插值语法

插值语法用于标签体之内

	<div id="demo">
	    <h1>Hello,{{name.toUpperCase()}},{{address}}</h1>
	</div>

“{{xxx}}” 中可以读取到data中的数据,也可以使用js表达式

指令语法

指令语法用于标签属性

<a v-bind:href="school.url.toUpperCase()" x="hello">点我去{{school.name}}学习</a>
<a :href="school.url" x="hello">点我去{{school.name}}学习</a>
		new Vue({
		    el: '#root',
		    data: {
		        name: 'jack',
		        school: {
		            name: 'schloo1',
		            url: 'http://www.baidu.com',
		        }
		    }
		})

v-bind 简写为 “:”

数据绑定

单向绑定

<div id="root">
    <!-- 普通写法 -->

    <!-- 单向数据绑定: -->
    <input type="text" v-bind:value="name"><br />
    <!-- 双向数据绑定: -->
    <input type="text" v-model:value="name"><br />

    <!-- 简写 -->

    <!-- 单向数据绑定: -->
    <input type="text" :value="name"><br />
    <!-- 双向数据绑定: -->
    <input type="text" v-model="name"><br />

    <!-- 如下代码是错误的,因为v-model只能应用在表单类元素(输入类元素)上 -->
    <h2 v-model:x="name">你好啊</h2>
</div>

v-bind
数据只能从data流向页面。

双向绑定

v-model

  1. 数据不仅能从data流向页面,还可以从页面流向data。
  2. 双向绑定一般都应用在表单类元素上(如:input、select等)
  3. v-model:value 可以简写为 v-model,因为v-model默认收集的就是value值。

MVVM模型

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

MVVM模型

数据代理

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


let obj = {x:100}
let obj2 = {y:200}

Object.defineProperty(obj2, 'x', {

    get(){
        return obj.x
    }, 
        set(value){
        obj.x = value
    }

})

忘记使用方法可以先回顾一下以下两个方法

点击查看

Object.defineProperty(obj, prop, descriptor)

参数

obj

要定义属性的对象。

prop

一个字符串或 Symbol,指定了要定义或修改的属性键。

descriptor

要定义或修改的属性的描述符。

返回值

传入函数的对象,其指定的属性已被添加或修改。

描述

Object.defineProperty() 允许精确地添加或修改对象上的属性。通过赋值添加的普通属性会在枚举属性时(例如 for…in、Object.keys() 等)出现,它们的值可以被更改,也可以被删除。此方法允许更改这些额外细节,以使其不同于默认值。默认情况下,使用 Object.defineProperty() 添加的属性是不可写、不可枚举和不可配置的。此外,Object.defineProperty() 使用 [DefineOwnProperty] 内部方法,而不是 [Set],因此即使属性已经存在,它也不会调用 setter。

对象中存在的属性描述符有两种主要类型:数据描述符和访问器描述符。数据描述符是一个具有可写或不可写值的属性。访问器描述符是由 getter/setter 函数对描述的属性。描述符只能是这两种类型之一,不能同时为两者。

数据描述符和访问器描述符都是对象。它们共享以下可选键(请注意:在使用 Object.defineProperty() 定义属性的情况下,下述所有键都是默认值):

可选项

value

与属性相关联的值。可以是任何有效的 JavaScript 值(数字、对象、函数等)。
默认值为 undefined。

enumerable

当且仅当该属性在对应对象的属性枚举中出现时,值为 true。
默认值为 false。

writable

如果与属性相关联的值可以使用赋值运算符更改,则为 true。
默认值为 false。

configurable

当设置为 false 时,该属性的类型不能在数据属性和访问器属性之间更改,且
该属性不可被删除,且其描述符的其他属性也不能被更改(但是,如果它是一个可写的数据描述符,则 value 可以被更改,writable 可以更改为 false)。
默认值为 false。

访问器描述符

get

用作属性 getter 的函数,如果没有 getter 则为 undefined。当访问该属性时,将不带参地调用此函数,并将 this 设置为通过该属性访问的对象(因为可能存在继承关系,这可能不是定义该属性的对象)。返回值将被用作该属性的值。默认值为 undefined。

set

用作属性 setter 的函数,如果没有 setter 则为 undefined。当该属性被赋值时,将调用此函数,并带有一个参数(要赋给该属性的值),并将 this 设置为通过该属性分配的对象。默认值为 undefined。

如果描述符没有 value、writable、get 和 set 键中的任何一个,它将被视为数据描述符。如果描述符同时具有 [value 或 writable] 和 [get 或 set] 键,则会抛出异常。

let number = 18
let person = {
    name: '张三',
    sex: '男',
}

Object.defineProperty(person, 'age', {
    value: 18,
    // enumerable:true, //控制属性是否可以枚举,默认值是false
    // writable:true, //控制属性是否可以被修改,默认值是false
    // configurable:true //控制属性是否可以被删除,默认值是false

    //当有人读取person的age属性时,get函数(getter)就会被调用,且返回值就是age的值
    get() {
        console.log('有人读取age属性了')
        return number
    },

    //当有人修改person的age属性时,set函数(setter)就会被调用,且会收到修改的具体值
    set(value) {
        console.log('有人修改了age属性,且值是', value)
        number = value
    }

})

参考来源:MDN web docs

Object.keys(obj)

参数

obj

可传入一个对象。

返回值

一个由给定对象自身可枚举的字符串键属性键组成的数组。

描述

Object.keys() 返回一个数组,其元素是字符串,对应于直接在对象上找到的可枚举的字符串键属性名。这与使用 for…in 循环迭代相同,只是for…in 循环还会枚举原型链中的属性。Object.keys() 返回的数组顺序和与 for…in 循环提供的顺序相同。

VUE中的数据代理

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

Vue中数据代理的好处:

更加方便的操作data中的数据

基本原理:

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

数据代理

事件处理

  1. 事件的回调需要配置在methods对象中,最终会在vm上
  2. methods中配置的函数,不要用箭头函数!否则this就不是vm了
  3. methods中配置的函数,都是被Vue所管理的函数,this的指向是vm 或 组件实例对象

事件基本使用

使用v-on:xxx 或 @xxx 绑定事件,其中xxx是事件名

@click=“demo” 和 @click=“demo($event)” 效果一致,但后者可以传参;

<div id="root">
    <h2>欢迎来到{{name}}学习</h2>
    <!-- <button v-on:click="showInfo">点我提示信息</button> -->
    <button @click="showInfo1">点我提示信息1(不传参)</button>
    <button @click="showInfo2($event,66)">点我提示信息2(传参)</button>
</div>
const vm = new Vue({
    el: '#root',
    data: {
        name: 'myname',
    },
    methods: {
        showInfo1(event) {
            alert('你好!')
        },
        showInfo2(event, number) {
            console.log(event, number)
            alert('你好!!')
        }
    }
})

event

表示出现在DOM中的事件

实例属性

点击查看更多实例属性
Event.bubbles (只读)

一个布尔值,用来表示该事件是否会在 DOM 中冒泡。

Event.cancelable (只读)

一个布尔值,表示事件是否可以取消。

Event.composed (只读)

一个布尔值,表示事件是否可以穿过 Shadow DOM 和常规 DOM 之间的边界进行冒泡。

Event.currentTarget (只读)

对事件当前注册的目标的引用。这是一个当前计划将事件发送到的对象。它是有可能在重定向(retarget)的过程中被改变的。

Event.defaultPrevented (只读)

一个布尔值,表示 Event.preventDefault() 方法是否取消了事件的默认行为。

Event.eventPhase (只读)

指示正在处理的事件流阶段。它是以下数字之一:NONE、CAPTURING_PHASE、AT_TARGET、BUBBLING_PHASE。

Event.isTrusted (只读)

表示事件是由浏览器(例如用户点击)发起的,还是由脚本发起的(例如使用事件创建方法)。

Event.target (只读)

对最初分发事件的对象的引用。

Event.timeStamp (只读)

事件创建时的时间戳(精度为毫秒)。按照规范,这个时间戳是 Unix 纪元起经过的毫秒数,但实际上,在不同的浏览器中,对此时间戳的定义也有所不同。另外,规范正在将其修改为 DOMHighResTimeStamp。

Event.type (只读)

事件的类型,不区分大小写。

实例方法

点击查看更多实例方法
Event.composedPath()

返回事件的路径(将在该对象上调用监听器)。如果阴影根(shadow root)节点创建时 ShadowRoot.mode 值为 closed,那么路径不会包括该根节点下影子树(shadow tree)的节点。

event.preventDefault

取消事件(如果该事件可取消)。

event.stopImmediatePropagation

对这个特定的事件而言,没有其他监听器被调用。这个事件既不会添加到相同的元素上,也不会添加到以后将要遍历的元素上(例如在捕获阶段)。

event.stopPropagation

停止冒泡,阻止事件在 DOM 中继续冒泡。

事件修饰符

可链式 例:click.prevent.stop

prevent

阻止默认事件(常用)

stop

阻止事件冒泡(常用)

once

事件只触发一次(常用)

capture

使用事件的捕获模式

self

只有event.target是当前操作的元素时才触发事件

passive

事件的默认行为立即执行,无需等待事件回调执行完毕

键盘事件

  • keyup
    按键抬起时触发
  • keydown
    按键按下时触发

使用示例:

<div id="root">
			<h2>欢迎来到{{name}}</h2>
			<input type="text" placeholder="按下回车提示输入" @keydown.enter="showInfo">
		</div>
new Vue({
			el:'#root',
			data:{
				name:'北京'
			},
			methods: {
				showInfo(e){
					console.log(e.target.value)
				}
			},
		})

键盘常用别名

VUE中提供的常用别名

回车 : enter
删除 : delete (“退格”键)
退出 : esc
空格 : space
换行 : tab (keydown时使用)
上 : up
下 : down
左 : left
右 : right

Vue.config.keyCodes.自定义键名 = 键码,可以去定制按键别名

系统修饰键(用法特殊):ctrl、alt、shift、meta
(1).配合keyup使用:按下修饰键的同时,再按下其他键,随后释放其他键,事件才被触发。
(2).配合keydown使用:正常触发事件。

可要求多个按键 例:keyup.ctrl.y

JS原生按键名

使用e.key 可以获取

多个单词例如:CapsLock 需要把大写换成小写字符之间用-连接为:caps-lock

0

评论区