快速入门Vue(1)

Vue周边库

  • vue-cli:vue脚手架

  • vue-resource

  • axios

  • vue-router:路由

  • vuex:状态管理

  • element-ui:基于vue的UI组件库(PC端)

1.2 初识Vue


开发环境部署

下载vue开发者工具

Vue.js和Vue.js.min

image-20220415190927926

关闭生产提示

image-20220415192249965

设置图标

强制刷新

shift+浏览器的刷新

正常请求,如果没有就不在请求了。所以可能看不到一些找不到图标的报错

image-20220415193216281

Hello World

  1. 想让Vue工作,就必须创建一个Vue实例,且要传入一个配置对象;

  2. root容器里的代码依然符合html规范,只不过混入了一些特殊的Vue语法;

  3. root容器里的代码被称为【Vue模板】;

  4. Vue实例和容器是一一对应的(不能一对多,也不能多对一);

  5. 真实开发中只有一个Vue实例,并且会配合着组件一起使用;

  6. {{xxx}}中的xxx要写js表达式,且xxx可以自动读取到data中的所有属性

  7. 一旦data中的数据发生改变,那么页面中用到该数据的地方也会自动更新(MVVM)

image-20220415200000276

注意区分:JS表达式和JS代码(语句):

  1. 表达式:一个表达式会产生一个值,可以放在任何一个需要值的地方

(1)a

(2)a+b

(3)demo(1)

(4)x === y ‘a’ : ‘b’

  1. js代码(语句)

(1)if(){}

(2)for(){}

表达式就是特殊的JS语句,能控制代码能否执行的就是JS语句

1.3 模板语法


概念: 容器里面的代码就是模板语法

模板语法分为两大类:

差值语法:

功能:用于解析标签体内容。

写法:{{xxx}},xxx是js表达式,且可以直接读取到data中的所有属性。

指令语法:

功能:用于解析标签(包括:标签属性、标签体内容、绑定事件…)

备注:Vue中有很多的指令,且形式都是:v-

举例:v-bind:hred=“xxx” 或 简写为 :href=“xxx”,xxx同样要写js表达式,且可以直接读取到data中的所有属性。

image-20220415214101999

1.4 数据绑定


Vue中有2种数据绑定的方式:

单向绑定(v-bind):数据只能从data流向页面。

双向绑定(v-model):数据不仅能从data流向页面,还可以从页面流向data。

备注:

1.双向绑定一般都应用在表单元素上(如:input、select等)

2.v-model:value 可以简写为 v-model,因为v-model默认收集的就是value值。

错误示例:

以下代码是错误的,因为v-model只能应用在表单类元素(输入类元素)上

hello

image-20220415220349306

el和data的两种写法

el有2种写法:

(1)new Vue时候el属性;

(2)先创建Vue实例,随后再通过vm.$mount(’#root’)指定el的值

data有2种写法:

(1)对象式

(2)函数式

如何选择?目前哪种写法都可以,以后学到组件时,data必须使用函数式,否则会报错

一个重要的原则:

只要是Vue所管理的函数,一定不要写箭头函数,一旦写了箭头函数,this就不再是Vue实例了,而是window

image-20220415221031629

MVVM

vm就是vue的实例对象

MVVM模型:

M:模型(Model):data中的数据

V:视图(View):Vue模板

VM:视图模型(ViewModel):Vue实例对象(绑定数据,dom监听)

观察发现:

data中所有的属性,最后都出现在了vm身上

vm身上所有的属性 及 Vue原型上所有属性,在Vue模板中都可以直接访问

image-20220415225307787

我们来重点理解中间的视图模型(VM)

中间的vm帮我们干了很多事,前端的框架都是这个套路

把一堆乱七八糟的数据和一堆dom结构,vue呢在中间做了个连接,它就是中间一个桥梁一个纽带

你把数据放在我要求放好的位置,然后你写出这种模板代码。模板里具体怎么插入值那你就要学习我的语法,像vue的插值语法啊,指令啊之类的。然后框架开始工作就可以将左边和右边的相互连接起来,并且还能给你承诺数据怎么变页面就怎么变

代码理解

image-20220415224437900

image-20220415230556981

我们也可以打印vm自带的变量或方法

image-20220415230714129

1.5 事件


事件处理

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

  2. 事件的回调需要配置在methods对象中,最终会再vm上;

  3. methods中配置的函数,不要用箭头函数!否则this就不是vm了而是window;

  4. methods中配置的函数,都是被Vue所管理的函数,this的指向是vm 或 组件实例对象;

  5. @click=“demo” 和 @click=“demo( e v e n t ) " 效 果 一 致 , 前 者 默 认 参 数 就 是 事 件 对 象 , 后 者 要 用 event)” 效果一致,前者默认参数就是事件对象,后者要用 event)"效果一致,前者默认参数就是事件对象,后者要用event才能生成事件对象,并且可以传多个参数;

备注:method上面的方法最终也会出现在vm上面,但它并没有作数据代理,因为没有必要,函数一旦定义好就直接拿来用。

测试给函数传参

image-20220415232447168

image-20220415234027874

事件修饰符

事件冒泡就是事件一个接一个的发生

prevent

阻止默认事件(常用)

本来弹窗完会跳转到百度(跳转到百度就属于默认事件),但是加上事件修饰符prevent的话弹完窗就不会跳到百度了

<a href=“http://www.baidu.com” @click.prevent=“showInfo”>点我跳转到百度

stop

阻止事件冒泡(常用)

触发完按钮的事件,又会触发div的事件。事件一个接一个的发生了这就叫事件冒泡

在单机事件后加上stop即可阻止事件冒泡

<button @click.stop=“showInfo”>点我提示信息

once

事件只触发一次(常用)

本来是点一次弹一次,加上once后只会弹一次

<button @click.once=“showInfo”>点我弹窗

captur

使用事件的捕获模式

事件流 分为 捕获冒泡

在这里插入图片描述

  1. 当点击div2的时候先经过两个阶段:事件捕获=>事件冒泡,默认是事件冒泡处理事件;

  2. 捕获阶段由外往内,冒泡阶段由内往外;

self

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

div1

div2

passive

先执行默认行为,后执行回调函数

键盘事件

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

回车 => enter

删除 => delete(捕获“删除(delete)”和“退格(BackSpace)”键)

退出 => esc

空格 => space

换行 => tab(特殊,必须配合 keydown 去使用)

上 => up

下 => down

左 => left

右 => right

image-20220416090552186

其他的键盘事件类似

image-20220416090828285

2.Vue未提供别名的案件,可以使用按键原始的key值去绑定,但注意要转为kebab-case(短横线命名)

3.系统修饰键(用法特殊):ctrl、alt、shift、meta

(1)配合keyup使用:按下修饰键的同时,再按下其他键,随后释放其它键,事件才被触发。(此时的e.key值是其它键,而不是系统修饰键)

(2)配合keydown使用:正常触发事件。

事件总结

修饰符小技巧:事件修饰符可以连着写

<a href=“http://www.atguigu.com” @click.stop.prevent=“showInfo”>点我提示信息

<input type=“text” placeholder=“按下回车提示输入” @keyup.ctrl.y=“showInfo”>

1.6 计算属性


姓名案例

将数据展示到页面时要清楚,你模板里写的是指令还是插值

Vue官方建议组件模板应该质包含简单的表达式,复杂的表达式则应该重构为计算属性或方法

差值语法实现:

姓:

名:

姓名:{{firstName.slice(0,3)}}-{{lastName}}

methods实现:

姓:

名:

姓名:{{fullName()}}

<button @click=“fullName”>点我

  • 注意methods方法在绑定事件的时候才可以省略小括号,在差值里不能

  • 只要data中的数据发生改变,Vue就会重新解析模板,只有重新解析模板才会拿到最新的值

computed实现:

姓:

名:

姓名:{{fullName}}

image-20220416091736494

image-20220416092857906

image-20220416095552629

计算属性

对于Vue来说,data里的配置项就是属性 。

计算属性,就是拿着写完的属性去加工计算,生成一个全新的属性。

计算属性直接被挂载到vm上,直接读取使用即可(_data里面没有计算属性)。

const vm = new Vue({

el: ‘#root’,

data: {

firstName: ‘张’,

lastName: ‘三’

},

computed: {

fullName: {

get() {

// 此处的this是vm

return this.firstName + ‘-’ + this.lastName;

}

}

}

})

get什么作用?

当有人读取fullName时,get就会被调用,且返回值就作为fullName的值。

(底层就是用Object.defineProperty的getter/setter实现的)

get什么时候被调用?

1.初次读取时会执行一次(往后就会取缓存里的数据)

2.所依赖的数据发生变化时会被再次调用(所以不用担心修改了值还会从缓存里获取)

{{fullName}}

{{fullName}}

{{fullName}}

{{fullName}}

set什么时候被调用?

当fullName被修改时。

如果计算属性要被修改,那必须写set函数去响应修改,且set中要引起计算时依赖的数据发生变化。

image-20220416111434073

computed对比methods:

computed有缓存机制(复用),效率更高、调试方便(devtools上会有一个computed的分类)。

methods函数出现几次就调用几次,效率比较低。

计算属性简写

一般来说计算属性是不修改的,更多是读取出来展示。

并不是什么时候都能用简写,只有考虑读取,不考虑修改的时候才能用简写形式。

image-20220416112041192

image-20220416111815272

天气案例

image-20220416113336974

1.7 监视


监视属性watch:

1.当被监视的属性变化时,回调函数自动调用,进行相关操作;

2.监视的属性必须存在,才能进行监视!!(除了data属性,computed属性也能监视)

3.监视的两种写法:

(1)new Vue时传入watch配置;

(2)通过vm.$watch监视;

(明确要监视哪些属性的时候用第一个。创建实例的时候不知道要监视谁,后续根据用户的一些行为然后才知道要监视哪个属性就用第二个)

watch配置属性:

immediate如果为true 代表如果在 wacth 里声明了之后,就会立即先去执行里面的handler方法

immediate (立即的) 初始化时让handlder调用一下

handler(newVal, oldVal) 当监视的属性发生改变的时候调用,参数可以拿到改变前后的值

deep 深度监听,可以监测多层级数据的改变

image-20220416114015488

image-20220416114637534

为什么配置项里的isHot不用加引号呢?

因为对象里的引号不用自己写,如果要用对象里的属性要加引号

image-20220416115735324

1.7.1 深度监视

1.Vue中的watch默认不监测对象内部值的变化(监测一层)

2.配置deep:true可以监测对象内部值变化(监测多层)

备注:

(1)Vue默认是可以监视到多层级数据的改变的(修改number.a页面发生改变可以看出)。但是watch属性默认是不可以的,要想可以就得打开深度监视(为了效率)。

(2)使用watch时根据数据的具体结果,决定是否采用深度监视。

image-20220416120633590

那么怎么才能监视上呢?

在handler方法上面加上deep:true即可

1.7.2 监视属性的简写

const vm = new Vue({

el: ‘#root’,

data: {

isHot: true

},

computed: {

info() {

return this.isHot ? ‘炎热’ : ‘凉爽’;

}

},

methods: {

changeWeather() {

this.isHot = !this.isHot

}

},

watch: {

// 正常写法:

/* isHot: {

// immediate: true,

// deep:true,

handler(newValue, oldValue) {

console.log(‘isHot被修改了’, newValue, oldValue);

}

}, */

// 简写:

isHot(newValue, oldValue) {

console.log(‘isHot被修改了’, newValue, oldValue);

}

}

});

// 正常写法:

vm.$watch(‘isHot’, {

// immediate: true,

// deep:true,

handler(newValue, oldValue) {

console.log(‘isHot被修改了’, newValue, oldValue);

}

});

// 简写:

vm.$watch(‘isHot’, function(newValue, oldValue) {

console.log(‘isHot被修改了’, newValue, oldValue);

});

1.7.3 watch对比computed

1.computed能完成的功能,watch都能完成。

2.watch能完成的功能,computed不一定能完成,例如:watch可以进行异步操作。(点击按钮让a过一秒+1,)

两个重要的小原则:

1.所有被Vue管理的函数,最好写成普通函数,这样this的指向才是vm 或 组件实例对象。

2.所有不被Vue所管理的函数(定时器的回调函数、ajax的回调函数、Promise的回调函数等),最好写成箭头函数,这样this的指向才是vm 或 组件实例对象。

1.8 class与style绑定


class样式:

写法==:class=“xxx”== xxx可以是字符串、对象、数组。

字符串写法适用于:类名不确定,要动态获取。

对象写法适用于:要绑定多个样式,个数不确定,名字也不确定。

数组写法适用于:要绑定多个样式,个数确定,名字也确定,但不确定用不用。

style样式:

:style="{fontSize: xxx}"其中xxx是动态值。(注意样式名得是小驼峰)

:style="[a,b]"其中a、b是样式对象。

{{name}}

{{name}}

{{name}}

{{name}}

1.9 渲染


条件渲染

=== 等值等类型

v-if

用来控制页面元素是否展示

写法:

v-if=“表达式”

v-else-if=“表达式”

v-else=“表达式”

适用于:切换频率较低的场景。

特点:不展示的DOM元素直接被移除。

注意:v-if可以和:v-else-if、v-else一起使用,但要求结构不能被“打断”。

image-20220416161333184

v-show

写法:v-show=“表达式”

适用于:切换频率较高的场景。

特点:不展示的DOM元素未被移除,仅仅是使用样式隐藏掉

v-show底层指令其实就是调整display:none

image-20220416155725949

v-if和template

  1. 如果需要频繁切换 v-show 较好

  2. 当条件不成立时, v-if 的所有子节点不会解析(项目中使用)1.10. 列表渲染

image-20220416161855040

列表渲染

image-20220420114134158

面试题:react、vue中的key有什么作用?(key的内部原理)

  1. 虚拟DOM中key的作用:

key是虚拟DOM对象的标识,当数据发生变化时,Vue会根据【新数据】生成【新的虚拟DOM】,

随后Vue进行【新虚拟DOM】与【旧虚拟DOM】的差异比较,比较规则如下:

2.对比规则:

(1).旧虚拟DOM中找到了与新虚拟DOM相同的key:

①.若虚拟DOM中内容没变, 直接使用之前的真实DOM!

②.若虚拟DOM中内容变了, 则生成新的真实DOM,随后替换掉页面中之前的真实DOM。

(2).旧虚拟DOM中未找到与新虚拟DOM相同的key

创建新的真实DOM,随后渲染到到页面。

  1. 用index作为key可能会引发的问题:

  2. 若对数据进行:逆序添加、逆序删除等破坏顺序操作:

会产生没有必要的真实DOM更新 ==> 界面效果没问题, 但效率低。

  1. 如果结构中还包含输入类的DOM:

会产生错误DOM更新 ==> 界面有问题。

  1. 开发中如何选择key?:

1.最好使用每条数据的唯一标识作为key, 比如id、手机号、身份证号、学号等唯一值。

2.如果不存在对数据的逆序添加、逆序删除等破坏顺序操作,仅用于渲染列表用于展示,

使用index作为key是没有问题的。

1.10 过滤器


immediate (立即的) 初始化时让handlder调用一下

image-20220420152945645

1.11 收集表单数据


简单来说,JSON.stringify () 就是将值转换为相应的 JSON 格式字符串。

v-model.trim用于去掉输入框内首尾空格

账号:

密码:

年龄:

提交

image-20220420163254761

v-model收集的是value值,且要给标签配置value值。

image-20220420171306857

总结

v-model的三个修饰符:

lazy:失去焦点再收集数据

number:输入字符串转为有效的数字

trim:输入首尾空格过滤

1.12 内置指令


v-text指令

1.作用:向其所在的节点中渲染文本内容。

2.与插值语法的区别:v-text会替换掉节点中的内容,{undefined{xx}}则不会。

你好,{{name}}

image-20220420171855727

v-html指令

1.作用:向指定节点中渲染包含html结构的内容。

2.与插值语法的区别:

v-html会替换掉节点中所有的内容,{{xx}}则不会。

v-html可以识别html结构。

3.严重注意:v-html有安全性问题!!!!

在网站上动态渲染任意HTML是非常危险的,容易导致XSS攻击。

一定要在可信的内容上使用v-html,永不要用在用户提交的内容上!

你好,{{name}}

v-once指令

  • v-once所在节点在初次动态渲染后,就视为静态内容了。

  • 以后数据的改变不会引起v-once所在结构的更新,可以用于优化性能。

初始化的n值是:{{ n }}

当前的n值是:{{ n }}

<button @click=“n++”>点我n+1

image-20220420172717406

1.13 生命周期


Vue 实例有⼀个完整的⽣命周期,也就是从new Vue()、初始化事件(.once事件)和生命周期、编译模版、挂载Dom -> 渲染、更新 -> 渲染、卸载 等⼀系列过程,称这是Vue的⽣命周期。

回调函数是你留个处理方法给事件,事件发生了以后会自动执行你留下调处理方法

钩子函数是好比找了个代理,监视事件是否发生,如果发生了这个代理就执行你的事件处理方法;在这个过程中,代理就是钩子函数

在某种意义上,回调函数做的处理过程跟钩子函数中要调用调方法一样

但是有一点: 钩子函数一般是由事件发生者提供的。直白了说,它留下一个钩子,这个钩子的作用就是钩住你的回调方法

==钩子函数是在一个事件触发的时候,在系统级捕获到了他,然后做一些操作。==一段用以处理系统消息的程序,用以处理系统消息的程序,是说钩子函数是用于处理系统消息的

img

二、组件化编程

======================================================================

2.1 编写应用对比


传统方式编写应用

建议自行观看,讲的很清晰

image-20220420182214465

组件化方式编写应用

组件的思想,其实就封装。能很好的实现代码复用技术

代码复用是写一次处处用(通过引用的方式),代码复制是写一次复制一次

image-20220420182727635

组件的定义

image-20220420195552167

2.2 非单文件组件


非单文件组件就是一个html页面里有多个组件

先来补充下template的功能

2.2.1 template

template用来定义html结构,其实``为模板字符串。它可以随意的换行

第一种情况,有 template:

如果 el 绑定的容器没有任何内容,就一个空壳子,但在 Vue 实例中写了 template,就会编译解析这个 template 里的内容,生成虚拟 DOM,最后将 虚拟 DOM 转为 真实 DOM 插入页面(其实就可以理解为 template 替代了 el 绑定的容器的内容)。

image-20220420180011506

第二种情况,没有 template:

没有 template,就编译解析 el 绑定的容器,生成虚拟 DOM,后面就顺着生命周期执行下去

2.2.2 基本使用

Vue中使用组件的三大步骤:

  • 定义组件(创建组件)

  • 注册组件

  • 使用组件(写组件标签)

定义组件

使用Vue.extend(options)创建,其中options和new Vue(options)时传入的那个options几乎一样,但也有点区别;

区别如下:

el不要写,为什么? ——— 最终所有的组件都要经过一个vm的管理,由vm中的el决定服务哪个容器。

组件中定义的data必须写成函数,为什么? ———— 避免组件被复用时,数据存在引用关系。

讲解一下面试小问题:data必须写成函数:

这是 js 底层设计的原因:举个例子

对象形式

let data = {

a: 99,

b: 100

}

let x = data;

let y = data;

// x 和 y 引用的都是同一个对象,修改 x 的值, y 的值也会改变

x.a = 66;

console.loh(x); // a:66 b:100

console.log(y); // a:66 b:100

函数形式

其中data可省略

function data() {

return {

a: 99,

b: 100

}

}

let x = data();

let y = data();

console.log(x === y); // false

//函数每调用一次就创建一个新的对象返回给他们

备注:使用template可以配置组件结构。

创建一个组件案例:Vue.extend() 创建

注册组件

  • 局部注册:靠new Vue的时候传入components选项

  • 全局注册:靠Vue.component(‘组件名’,组件)

局部注册

全局注册

写组件标签


{{msg}}



2.2.3 几个注意点

关于组件名:

一个单词组成:

  • 第一种写法(首字母小写):school

  • 第二种写法(首字母大写):School

多个单词组成:

  • 第一种写法(kebab-case命名):my-school

  • 第二种写法(CamelCase命名):MySchool (需要Vue脚手架支持)

备注:

(1).组件名尽可能回避HTML中已有的元素名称,例如:h2、H2都不行。

(2).可以使用name配置项指定组件在开发者工具中呈现的名字。

关于组件标签

第一种写法:

第二种写法:

备注:不用使用脚手架时,会导致后续组件不能渲染。

一个简写方式:

const school = Vue.extend(options) 可简写为:const school = options

2.2.4 组件的嵌套

2.2.5 VueComponent

school组件本质是一个名为VueComponent的构造函数,且不是程序员定义的,是Vue.extend生成的。

我们只需要写<school/><school><school/>,解析时会帮我们创建school组件的实例对象,即Vue帮我们执行的:new VueComponent(options)。

特别注意:每次调用Vue.extend,返回的都是一个全新的VueComponent!!!!(这个VueComponent可不是实例对象)

关于this指向:

组件配置中:data函数、methods中的函数、watch中的函数、computed中的函数 它们的this均是【VueComponent实例对象】。

new Vue(options)配置中:data函数、methods中的函数、watch中的函数、computed中的函数 它们的this均是【Vue实例对象】。

VueComponent的实例对象,以后简称vc(也可称之为:组件实例对象)。

Vue的实例对象,以后简称vm。

Vue 在哪管理 VueComponent?

image-20220420212743331

2.2.6 一个重要的内置关系

  • 一个重要的内置关系:VueComponent.prototype.proto === Vue.prototype

  • 为什么要有这个关系:让组件实例对象(vc)可以访问到 Vue原型上的属性、方法。

image-20220420213310666

2.3 单文件组件

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数前端工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:前端)

最后

你要问前端开发难不难,我就得说计算机领域里常说的一句话,这句话就是『难的不会,会的不难』,对于不熟悉某领域技术的人来说,因为不了解所以产生神秘感,神秘感就会让人感觉很难,也就是『难的不会』;当学会这项技术之后,知道什么什么技术能做到什么做不到,只是做起来花多少时间的问题而已,没啥难的,所以就是『会的不难』。

我特地针对初学者整理一套前端学习资料,免费分享给大家,戳这里即可免费领取

前端路线图

学生姓名:{{name}}

学生年龄:{{age}}

`,

data(){

return {

name:‘尚硅谷’,

age:18

}

}

})

//定义school组件

const school = Vue.extend({

name:‘school’,

template:`

学校名称:{{name}}

学校地址:{{address}}

`,

data(){

return {

name:‘尚硅谷’,

address:‘北京’

}

},

// 注册组件(局部)

components:{

student

}

})

//定义hello组件

const hello = Vue.extend({

template:<h1>{{msg}}</h1>,

data(){

return {

msg:‘欢迎来到尚硅谷学习!’

}

}

})

//定义app组件

const app = Vue.extend({

template:`

`,

components:{

school,

hello

}

})

//创建vm

new Vue({

template:‘’,

el:‘#root’,

//注册组件(局部)

components:{app}

})

2.2.5 VueComponent

school组件本质是一个名为VueComponent的构造函数,且不是程序员定义的,是Vue.extend生成的。

我们只需要写<school/><school><school/>,解析时会帮我们创建school组件的实例对象,即Vue帮我们执行的:new VueComponent(options)。

特别注意:每次调用Vue.extend,返回的都是一个全新的VueComponent!!!!(这个VueComponent可不是实例对象)

关于this指向:

组件配置中:data函数、methods中的函数、watch中的函数、computed中的函数 它们的this均是【VueComponent实例对象】。

new Vue(options)配置中:data函数、methods中的函数、watch中的函数、computed中的函数 它们的this均是【Vue实例对象】。

VueComponent的实例对象,以后简称vc(也可称之为:组件实例对象)。

Vue的实例对象,以后简称vm。

Vue 在哪管理 VueComponent?

image-20220420212743331

2.2.6 一个重要的内置关系

  • 一个重要的内置关系:VueComponent.prototype.proto === Vue.prototype

  • 为什么要有这个关系:让组件实例对象(vc)可以访问到 Vue原型上的属性、方法。

image-20220420213310666

2.3 单文件组件

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数前端工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

[外链图片转存中…(img-1jP2ZPzt-1713805523561)]

[外链图片转存中…(img-cFYEnFki-1713805523561)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!

[外链图片转存中…(img-CC4OK0tC-1713805523562)]

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:前端)

[外链图片转存中…(img-JnPCuXAO-1713805523562)]

最后

你要问前端开发难不难,我就得说计算机领域里常说的一句话,这句话就是『难的不会,会的不难』,对于不熟悉某领域技术的人来说,因为不了解所以产生神秘感,神秘感就会让人感觉很难,也就是『难的不会』;当学会这项技术之后,知道什么什么技术能做到什么做不到,只是做起来花多少时间的问题而已,没啥难的,所以就是『会的不难』。

我特地针对初学者整理一套前端学习资料,免费分享给大家,戳这里即可免费领取

[外链图片转存中…(img-RueAG2Pl-1713805523562)]

vue.js的36个技巧

  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值