vue学习笔记01

学习的课程地址:老杜Vue视频教程,Vue2,Vue3实战精讲,一套通关vue_哔哩哔哩_bilibili

1、vue程序初体验

vue是一个基于JavaScript实现的框架。

vue2:Vue.js

vue3:Vue.js - 渐进式 JavaScript 框架 | Vue.js

1.1当你使用script进行vue安装之后,上下文中就注册了一个全局变量:vue

1.2第一个vue程序

第一步:创建vue实例

(1)需要new vue(),不能直接调用vue函数创建

(2)vue构造函数的参数:options,要求必须是一个纯粹的js对象:{},

        在{}对象中可以编写大量的key:value对,一个key:value对就是一个配置项

(3)template配置项,用来指定模板语句,模板语句是一个字符串。模板语句可以是HTML、Vue的特殊规则或HTML+Vue的特殊规则。

第二步:将vue实例挂载到ID=‘app’的元素位置

(1)vue实例都有一个$mount()方法,将vue实例挂载到指定位置。

(2)#app是ID选择器,语法借鉴了CSS

(3)template后面的模板语句会被vue框架的编译器进行编译,转换成浏览器能够识别的HTML代码。

1.3模板语句的数据来源

(1)data选项的类型Object | Function(对象或者函数)

(2)data配置项的专业叫法:vue实例的数据对象。(data实际上给整个vue实例提供数据来源)

(3)data为对象时,必须是纯粹的对象(含有零个或多个的key/value对)

(4)模板语法中的插值语法{{data的key}},如:{{name}}(胡子语法)

(5)data中的value可以是个对象,此时它的取法是{{key.subkey}},如:{{lead.name}}

(6)data中的value也可以是个数组,此时它的取法是{{key[index].subkey}},如:{{actors[0].name}}

(7)template使用后面的字符串(键盘Tab键的上面):``可以支持换行。

1.4template配置项详解

(1)template后面的模板语句只能有一个根节点;

(2)只要data中的数据发生变化,模板语句一定会重新编译;

(3)template指定挂载位置的元素会被替换,因此可以直接编写在挂载位置的HTML中;

1.5关于$mount('#app')

(1)可以使用el配置项代替$mount('#app'),后面生命周期也会介绍;

(2)el:'#app'表示让vue去接管id='app'的容器,等价于 el:document.getElementById('app')。

1.6解决一些提示或报错:

生产环境报错、开发工具警告、favicon图标报错

1.6.1vue.config是vue的全局配置对象,它里面有个productionTip属性。

(1)productionTip属性可以设置是否生成生产提示信息,默认是:true,如果是false则表示阻止生成生产提示信息

Vue.config.productionTip=false,如果不管用可以直接改源码;

1.6.2解决提示或报错:Devtools

(1)百度极简插件=>搜vue Devtools=>下载=>解压=>得到crx文件

(2)谷歌浏览器=>更多工具=>扩展程序=>打开"开发者模式"=>crx文件拖了扔进去

1.6.3解决提示或报错:shift+F5强行刷新浏览器会看到红色报错

(1)代码是使用Live Server插件进行运行的,vscode模拟服务器运行,5500端口号

(2)favicon.ico服务器根目录下没有,添加一个即可解决。

1.7开发者工具

(1)浏览器开发工具重点关注的面板:

a、元素:快速查看页面元素;

b、控制台:打印字符串、查看某些变量、某些属性数据的值、也可直接写js代码、程序运行出现的警告错误信息、

c、网络:前后端的具体传送信息的细节

(2)vue图标:没有vue程序不会点亮

三栏:app,组件,组件相关的数据

Root:根组件

组件相关的数据:可能会遇到纯中文开头不显示的问题。

1.8vue实例和容器的关系是:

一夫一妻制

一个vue实例只能接管一个容器,一旦接管到容器之后,即使后面再有相同的容器,vue也是不管的。

2、vue核心技术(基础)

2.1模板语法之插值语法{{}}

{{这里可以写什么}}

(1)在data中声明的.(变量、函数等)

(2)常量

(3)只要是合法的JavaScript表达式(可以产生一个值)

(4)模板表达式放在沙盒中,只能访问全局变量的一个白名单,如Math和Date等

Infinity,undefined,NaN,isFinite,isNaN,parseFloat,parseInt,decodeURI,decodeURIComponent,encodeURI,encodeURIComponent,Math,Number,Date,Array,Object,Boolean,String,RegExp,Map,Set,JSON,Intl,require

2.2模板语法之指令语法v-???

(1)所有的指令都是以"v-"开始的,它的职责是:当表达式的值改变时,将其产生的连带影响,响应式的作用于DOM;

(2)插值是写在标签体中,而指令是写在html标签的属性位置。

(3)指令的语法规则:<html v-指令名:参数="表达式"></html>,不是所有的指令都有参数和表达式,例如:v-once;而有的指令,不需要参数,但是需要表达式,如:v-if=“表达式”;而有的指令,既需要参数,又需要表达式,如:v-band:参数="表达式"。

(4)v-once:只渲染一次,第二次渲染视为静态资源跳过去。

(5)v-if=“表达式”,表达式的执行结果是个true或者false。true:指令所在的标签会被渲染到浏览器当中,false:则不会渲染。

2.3v-band指令详解

(1)它是一个负责动态绑定的指令,可以让HTML标签的某个属性的值产生动态效果

(2)<HTML v-band:参数="表达式"></HTML>编译后:<HTML 参数="表单式的执行结果">  </HTML>

(3) 表达式会关联data,当data发生改变之后,表示式的执行结果就会发生变化;

(4)大部分情况下,参数名还是写成该HTML标签支持的属性名,这样才会有意义,如:<img v-bind:src="imgPath">;

(5)因为v-bind指令很常用,所以提供了简写形式,<img :src="imgPath">

2.4v-model指令详解

(1)和v-bind类似,都可以完成数据绑定,不过v-model是双向数据绑定;

(2)v-model只能使用在表单类元素上,如:input、select、textarea,因为表单类的元素才能提供给用户交互输入的界面;

(3)v-model通常是用在value属性上;

(4)v-model的简写:v-model:value="表达式"===>v-model="表达式"

2.5MVVM分层思想

(1)M:model(模型/数据)

        V:View(视图)

        VM:ViewModel(视图模型),是核心部分。

(2)vue虽然没有完全遵循MVVM模型,但是vue也受到MVVM的启发

(3) 不需要再写大篇幅的操作DOM元素的JS代码,当model发生改变之后,VM自动更新view;同理,当view发生变化之后,VM自动更新model。

2.6vscode自动生成代码小技巧

(1)左下角:管理->配置用户代码片段->输入JavaScript->回车:打开javascript.json

(2)"print to console" :提示信息;

"prefix":前缀,简写;

"body":配置真正要生成的代码片段。是个数组,元素(一行代码)之间用逗号隔开,双引号开始,双引号结束;

"description":描述信息,不重要,可以省略;

'$1':生成代码后,光标第一次定位位置;

'$2':如果在$1位置,按了TAB键,光标将跳到的位置;

(3)例子:

(4)自带代码片段的插件推荐:JavaScript(ES6)code snippets 

2.7通过VM可以访问哪些属性

(1)vm.$el:可以获取到这个容器;vm.$children;vm.$options;vm._data;[[prototype]]:vue的原型对象。

(2)vue实例中的属性很多,有以$开始的属性,是公开的属性,供程序员使用的;有以_开始的属性,是vue框架内部使用的,不推荐程序员使用;通过VM也可以访问vue实例对象的原型对象上的属性,如:vm.$delete...

2.8Object.defineProperty()方法

(1)是ES5新增的,功能是给对象新增属性,或者设置对象原有的属性。

(2)语法格式:object.defineProperty(给哪个对象新增属性,'新增的这个属性名叫啥',{给新增的属性设置相关的配置项key:value对})

(3)第三个参数的配置项:

a、value配置项:给属性指定值。

b、writable配置项:设置该属性的值是否可以被修改。true表示可以修改;false表示不能修改。

c、getter方法配置项:不需要手动调用,当读取属性值的时候,getter方法被自动调用,getter必须有返回值,就代表属性的值。

d、setter方法配置项:不需要手动调用,当修改属性值的时候,setter方法被自动调用,setter方法上是有一个参数,这个参数用于接收传过来的值;

注意:当配置项当中有setter和getter的时候,value和writable配置项都不能存在。

2.9数据代理机制

(1)通过访问代理对象的属性来间接访问目标对象的属性。数据代理机制的实现需要依靠:Object.defineProperty()方法。

 (2)ES6新特性:在对象中的函数/方法  :function是可以省略的。

(3)name(...)表示这个属性是代理对象中的属性,当点击(...)时,它会动态的去调用getter方法,来获取这个值。

2.10vue数据代理时对属性名字的要求

(1)vue实例不会给以_和$开始的属性做数据代理;

(2)在vue当中,给data添加数据时,属性名不能以_和$开始的

2.11手写vue框架的数据代理

2.12vue框架源代码解读

(1)增加对首字母的判断,

let firstChar=propertyName.charAt(0)

if(firstChar != '_'  && firstChar !='$'){}

(2)vue源码

如果不想使用数据代理的方式,还可以使用vm.$data的方式获取数据。

2.13data也可是一个函数

(1)data fuctions should return an object:data函数应该返回一个对象;

(2)如果是函数的话,必须使用return语句返回{}对象

data:function(){//在对象当中,函数的:function可以省略
    return{
        msg:'Hello Vue!'
        }
    }

(3)什么时候用对象?什么时候用函数? (等你学到组件的时候,自然就明白了)

(4)关于Object.defineProperty中的配置项:enumerable、configurable

a、enumerable:true表示该属性是可以遍历的(可枚举的,可迭代的);false表示该属性是不可遍历的。

b、configurable:true表示该属性是可以被删除的;false表示该属性是不可以被删除的。

2.14vue的事件绑定 

(1)vue的事件绑定需要借助一个指令:(v-指令名:参数名="表达式")v-on:事件名="表达式"

如:v-on:click="表达式" 表示当发生鼠标单击事件之后,执行表达式;

        v-on:keydown="表达式" 表示当发生键盘按下事件之后,执行表达式。

(2)在vue当中,所有事件关联的回调函数,需要在vue实例的配置项methods中进行定义。

(3)v-on指令的简写形式:v-on:click="sayHello"   ==>@click="sayHello"

(4)绑定的回调函数,如果不需要传任何参数,小括号()可以省略。

(5)当前发生的事件对象会作为参数传给事件的回调函数:event。

而event.target:事件发生在哪里(按钮上),event.target.innerText:按钮上的文本;

(6)如果回调函数本身需要传入参数,你还需要事件对象,可以使用$event占位符:@click="sayHi('jack',$event)"

2.15关于回调函数中的this

(1)this代表vue实例;

(2)箭头函数中的this是window,箭头函数中没有this,箭头函数中的this是从父级作用域当中继承过来的,对于当前程序来说,父级作用域是全局作用域:window

(3)methods的实现原理:通过VM可以访问methods对象中的方法。

class Vue {
    //定义构造函数
    constructor(options){
        //获取所有的方法名
        Object.keys(options.methods).forEach((methodName,index)=>{
            //给当前的Vue实例扩展一个方法
            this[methodName]=options.methods[methodName]
        })
    }
}

2.16事件当中的事件修饰符

(1)javascr手动调用事件对象的preventDefault()方法,可以阻止事件的默认行为;在Vue当中,这种事件的默认行为可以不采用手动调用DOM的方式来完成,可以使用事件修饰符:prevent。

@click.prevent="yi"

(2).stop:停止事件冒泡,等同于event.stopPropagation()。父元素上绑定的相同类型的事件处理函数就不会被触发。

<div @click="san">
    <div @click="er">
        <button @click.stop="yi">事件冒泡</button>
    </div>
</div>

.prevent :等同于event.preventDefault()阻止事件的默认行为。

<a href="https://www.baidu.com" @click.prevent="yi">百度</a>

.capture:添加事件监听器时使用事件捕获模式。一种从内到外添加(事件冒泡模式)、一种从外到内添加(事件捕获模式),添加事件监听器时,谁先添加,谁先执行。

<div @click.capture="san">
    <div @click.capture="er">
        <button @click.capture="yi">添加事件监听器的时候采用事件捕获模式</button>
        //执行顺序:san er yi
    </div>
</div>

.self:这个事件如果是“我自己元素”上发生的事件,这个事件不是别人给我传递过来的事件,则执行对应的程序。

<div @click="san">
    //在vue当中,事件修饰符可以多个联合使用,但是不同的顺序是区别的
    <div @click.self.stop="er">
        <button @click="yi">self修饰符</button>
    </div>
</div>

.once:事件自发生一次

.passive:翻译为:顺从/不抵抗。无需等待,直接继续(立即)执行事件的默认行为。与.prevent修饰符是对立的,不可以共存。是@wheel 鼠标滚轮滚动事件的不卡顿解决方案。优先事件的默认行为,不等待程序中间的其他代码执行完成。

2.17按键修饰符
<input type="text" @keyup="getInfo">
//常规方法
methods:{
    getInfo(event){
        //当用户键入回车键的时候,获取用户输入的信息
        if(event.keyCode === 13){
            console.log(event.target.value)
        }
    }
}
//按键修饰符
<input type="text" @keyup.enter="getInfo">

methods:{
    getInfo(event){
      console.log(event.target.value)
    }
}

(1)九个比较常用的:.enter,.tab,.delete(捕获“删除”和“退格”键),.esc,.space,.up,.down,.left,.right

(2).tab无法触发keyup事件,只能触发keydown事件。

(3)怎么获取某个键的按键修饰符:

第一步:通过event.key获取这个按键的真实名字。

第二步:将这个真实名字以kebab-case风格进行命名。

如:PageDown是真实名字,经过命名之后:page-down

(4)按键修饰符的自定义

通过Vue的全局配置对象config来进行按键修饰符的自定义,

语法规则:Vue.config.keyCodes.按键修饰符的名字=键值

huiche键:<input type="text" @keyup.huiche="getInfo"><br>

//自定义了一个按键修饰符.huiche,代表回车键
Vue.config.keyCodes.huiche=13

(5)系统修饰键:4个比较特殊的键

ctrl、alt、shift、meta

对于keydown事件来说:只要按下ctrl键,keydown事件就会触发。

对于keyup事件来说:需要按下ctrl键,并且加上按下组合键,然后松开组合键之后,keyup事件才能触发。

ctrl键(keydown)<input type="text" @keydown.ctrl="getInfo"><br>
ctrl键(keyup)<input type="text" @keyup.ctrl="getInfo"><br>
ctrl键(keyup)<input type="text" @keydown.ctrl.i="getInfo"><br>

后续参见:

vue学习笔记02

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值