Vue周边库
- vue-cli:vue脚手架
- vue-resource
- axios
- vue-router:路由
- vuex:状态管理
- element-ui:基于vue的UI组件库(PC端)
开发环境部署
下载vue开发者工具
Vue.js和Vue.js.min
关闭生产提示
设置图标
强制刷新
shift+浏览器的刷新
正常请求,如果没有就不在请求了。所以可能看不到一些找不到图标的报错
Hello World
- 想让Vue工作,就必须创建一个Vue实例,且要传入一个配置对象;
- root容器里的代码依然符合html规范,只不过混入了一些特殊的Vue语法;
- root容器里的代码被称为【Vue模板】;
- Vue实例和容器是一一对应的(不能一对多,也不能多对一);
- 真实开发中只有一个Vue实例,并且会配合着组件一起使用;
- { {xxx}}中的xxx要写js表达式,且xxx可以自动读取到data中的所有属性
- 一旦data中的数据发生改变,那么页面中用到该数据的地方也会自动更新(MVVM)
注意区分:JS表达式和JS代码(语句):
- 表达式:一个表达式会产生一个值,可以放在任何一个需要值的地方
(1)a
(2)a+b
(3)demo(1)
(4)x === y ‘a’ : ‘b’
- js代码(语句)
(1)if(){}
(2)for(){}
表达式就是特殊的JS语句,能控制代码能否执行的就是JS语句
概念: 容器里面的代码就是模板语法
模板语法分为两大类:
差值语法:
功能:用于解析标签体内容。
写法:{ {xxx}},xxx是js表达式,且可以直接读取到data中的所有属性。
指令语法:
功能:用于解析标签(包括:标签属性、标签体内容、绑定事件…)
备注:Vue中有很多的指令,且形式都是:v-
举例:v-bind:hred=“xxx” 或 简写为 :href=“xxx”,xxx同样要写js表达式,且可以直接读取到data中的所有属性。
Vue中有2种数据绑定的方式:
单向绑定(v-bind):数据只能从data流向页面。
双向绑定(v-model):数据不仅能从data流向页面,还可以从页面流向data。
备注:
1.双向绑定一般都应用在表单素上(如:input、select等)
2.v-model:value 可以简写为 v-model,因为v-model默认收集的就是value值。
错误示例:
以下代码是错误的,因为v-model只能应用在表单类素(输入类素)上
hello
el和data的两种写法
el有2种写法:
(1)new Vue时候el属性;
(2)先创建Vue实例,随后再通过vm.$mount(’#root’)指定el的值
data有2种写法:
(1)对象式
(2)函数式
如何选择?目前哪种写法都可以,以后学到组件时,data必须使用函数式,否则会报错
一个重要的原则:
只要是Vue所管理的函数,一定不要写箭头函数,一旦写了箭头函数,this就不再是Vue实例了,而是window
MVVM
vm就是vue的实例对象
MVVM模型:
M:模型(Model):data中的数据
V:视图(View):Vue模板
VM:视图模型(ViewModel):Vue实例对象(绑定数据,dom监听)
观察发现:
data中所有的属性,最后都出现在了vm身上
vm身上所有的属性 及 Vue原型上所有属性,在Vue模板中都可以直接访问
我们来重点理解中间的视图模型(VM)
中间的vm帮我们干了很多事,前端的框架都是这个套路
把一堆乱七八糟的数据和一堆dom结构,vue呢在中间做了个连接,它就是中间一个桥梁一个纽带
你把数据放在我要求放好的位置,然后你写出这种模板代码。模板里具体怎么插入值那你就要学习我的语法,像vue的插值语法啊,指令啊之类的。然后框架开始工作就可以将左边和右边的相互连接起来,并且还能给你承诺数据怎么变页面就怎么变
代码理解
我们也可以打印vm自带的变量或方法
事件处理
- 使用 v-on:xxx 或 @xxx 绑定事件,其中xxx是事件名;
- 事件的回调需要配置在methods对象中,最终会再vm上;
- methods中配置的函数,不要用箭头函数!否则this就不是vm了而是window;
- methods中配置的函数,都是被Vue所管理的函数,this的指向是vm 或 组件实例对象;
- @click=“demo” 和 @click=“demo( e v e n t ) " 效 果 一 致 , 前 者 默 认 参 数 就 是 事 件 对 象 , 后 者 要 用 event)” 效果一致,前者默认参数就是事件对象,后者要用 event)"效果一致,前者默认参数就是事件对象,后者要用event才能生成事件对象,并且可以传多个参数;
备注:method上面的方法最终也会出现在vm上面,但它并没有作数据代理,因为没有必要,函数一旦定义好就直接拿来用。
测试给函数传参
事件修饰符
事件冒泡就是事件一个接一个的发生
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
使用事件的捕获模式
事件流 分为 捕获 和 冒泡
- 当div2的时候先经过两个阶段:事件捕获=>事件冒泡,默认是事件冒泡处理事件;
- 捕获阶段由外往内,冒泡阶段由内往外;
self
只有event.target是当前操作的素时才触发事件
div1
div2
passive
先执行默认行为,后执行回调函数
键盘事件
1.Vue中常用的按键别名:
回车 => enter
删除 => delete(捕获“删除(delete)”和“退格(BackSpace)”键)
退出 => esc
空格 => space
换行 => tab(特殊,必须配合 keydown 去使用)
上 => up
下 => down
左 => left
右 => right
其他的键盘事件类似
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”>
姓名案例
将数据展示到页面时要清楚,你模板里写的是指令还是插值
Vue官方建议组件模板应该质包含简单的表达式,复杂的表达式则应该重构为计算属性或方法
差值语法实现:
姓:
名:
姓名:{ {firstName.slice(0,3)}}-{ {lastName}}
methods实现:
姓:
名:
姓名:{ {fullName()}}
<button @click=“fullName”>点我
- 注意methods方法在绑定事件的时候才可以省略小括号,在差值里不能
- 只要data中的数据发生改变,Vue就会重新解析模板,只有重新解析模板才会拿到最新的值
computed实现:
姓:
名:
姓名:{ {fullName}}
计算属性
对于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中要引起计算时依赖的数据发生变化。
computed对比methods:
computed有缓存机制(复用),效率更高、调试方便(devtools上会有一个computed的分类)。
methods函数出现几次就调用几次,效率比较低。
计算属性简写
一般来说计算属性是不修改的,更多是读取出来展示。
并不是什么时候都能用简写,只有考虑读取,不考虑修改的时候才能用简写形式。
天气案例
监视属性watch:
1.当被监视的属性变化时,回调函数自动调用,进行相关操作;
2.监视的属性必须存在,才能进行监视!!(除了data属性,computed属性也能监视)
3.监视的两种写法:
(1)new Vue时传入watch配置;
(2)通过vm.$watch监视;
(明确要监视哪些属性的时候用第一个。创建实例的时候不知道要监视谁,后续根据用户的一些行为然后才知道要监视哪个属性就用第二个)
watch配置属性:
immediate如果为true 代表如果在 wacth 里声明了之后,就会立即先去执行里面的handler方法
immediate (立即的) 初始化时让handlder调用一下
handler(newVal, oldVal) 当监视的属性发生改变的时候调用,参数可以拿到改变前后的值
deep 深度监听,可以监测多层级数据的改变
为什么配置项里的isHot不用加引号呢?
因为对象里的引号不用自己写,如果要用对象里的属性要加引号
1.7.1 深度监视
1.Vue中的watch默认不监测对象内部值的变化(监测一层)
2.配置deep:true可以监测对象内部值变化(监测多层)
备注:
(1)Vue默认是可以监视到多层级数据的改变的(修改number.a页面发生改变可以看出)。但是watch属性默认是不可以的,要想可以就得打开深度监视(为了效率)。
(2)使用watch时根据数据的具体结果,决定是否采用深度监视。
那么怎么才能监视上呢?
在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 或 组件实例对象。
class样式:
写法==:class=“xxx”== xxx可以是字符串、对象、数组。
字符串写法适用于:类名不确定,要动态获取。
对象写法适用于:要绑定多个样式,个数不确定,名字也不确定。
数组写法适用于:要绑定多个样式,个数确定,名字也确定,但不确定用不用。
style样式:
:style="{fontSize: xxx}"其中xxx是动态值。(注意样式名得是小驼峰)
:style="[a,b]"其中a、b是样式对象。
条件渲染
=== 等值等类型
v-if
用来控制页面素是否展示
写法:
v-if=“表达式”
v-else-if=“表达式”
v-else=“表达式”
适用于:切换频率较低的场景。
特点:不展示的DOM素直接被移除。
注意:v-if可以和:v-else-if、v-else一起使用,但要求结构不能被“打断”。
v-show
写法:v-show=“表达式”
适用于:切换频率较高的场景。
特点:不展示的DOM素未被移除,仅仅是使用样式隐藏掉
v-show底层指令其实就是调整display:none
v-if和template
- 如果需要频繁切换 v-show 较好
- 当条件不成立时, v-if 的所有子节点不会解析(项目中使用)1.10. 列表渲染
列表渲染
面试题:react、vue中的key有什么作用?(key的内部原理)
- 虚拟DOM中key的作用:
key是虚拟DOM对象的标识,当数据发生变化时,Vue会根据【新数据】生成【新的虚拟DOM】,
随后Vue进行【新虚拟DOM】与【旧虚拟DOM】的差异比较,比较规则如下:
2.对比规则:
(1).旧虚拟DOM中找到了与新虚拟DOM相同的key:
①.若虚拟DOM中内容没变, 直接使用之前的真实DOM!
②.若虚拟DOM中内容变了, 则生成新的真实DOM,随后替换掉页面中之前的真实DOM。
(2).旧虚拟DOM中未找到与新虚拟DOM相同的key
创建新的真实DOM,随后渲染到到页面。
- 用index作为key可能会引发的问题:
- 若对数据进行:逆序添加、逆序删除等破坏顺序操作:
会产生没有必要的真实DOM更新 ==> 界面效果没问题, 但效率低。
- 如果结构中还包含输入类的DOM:
会产生错误DOM更新 ==> 界面有问题。
- 开发中如何选择key?:
1.最好使用每条数据的唯一标识作为key, 比如id、手机号、身份证号、学号等唯一值。
2.如果不存在对数据的逆序添加、逆序删除等破坏顺序操作,仅用于渲染列表用于展示,
使用index作为key是没有问题的。
immediate (立即的) 初始化时让handlder调用一下
简单来说,JSON.stringify () 就是将值转换为相应的 JSON 格式字符串。
v-model.trim用于去掉输入框内首尾空格
账号:
密码:
年龄:
提交
v-model收集的是value值,且要给标签配置value值。
总结
v-model的三个修饰符:
lazy:失去焦点再收集数据
number:输入字符串转为有效的数字
trim:输入首尾空格过滤
v-text指令
1.作用:向其所在的节点中渲染文本内容。
2.与插值语法的区别:v-text会替换掉节点中的内容,{undefined{xx}}则不会。
v-html指令
1.作用:向指定节点中渲染包含html结构的内容。
2.与插值语法的区别:
v-html会替换掉节点中所有的内容,{ {xx}}则不会。
v-html可以识别html结构。
3.严重注意:v-html有安全性问题!!!!
在网站上动态渲染任意HTML是非常危险的,容易导致XSS攻击。
一定要在可信的内容上使用v-html,永不要用在用户提交的内容上!
v-once指令
- v-once所在节点在初次动态渲染后,就视为静态内容了。
- 以后数据的改变不会引起v-once所在结构的更新,可以用于优化性能。
初始化的n值是:{ { n }}
当前的n值是:{ { n }}
<button @click=“n++”>点我n+1
Vue 实例有⼀个完整的⽣命周期,也就是从new Vue()、初始化事件(.once事件)和生命周期、编译模版、挂载Dom -> 渲染、更新 -> 渲染、卸载 等⼀系列过程,称这是Vue的⽣命周期。
回调函数是你留个处理方法给事件,事件发生了以后会自动执行你留下调处理方法
钩子函数是好比找了个代理,监视事件是否发生,如果发生了这个代理就执行你的事件处理方法;在这个过程中,代理就是钩子函数
在某种意义上,回调函数做的处理过程跟钩子函数中要调用调方法一样
但是有一点: 钩子函数一般是由事件发生者提供的。直白了说,它留下一个钩子,这个钩子的作用就是钩住你的回调方法
==钩子函数是在一个事件触发的时候,在系统级捕获到了他,然后做一些操作。==一段用以处理系统消息的程序,用以处理系统消息的程序,是说钩子函数是用于处理系统消息的
======================================================================
传统方式编写应用
建议自行观看,讲的很清晰
组件化方式编写应用
组件的思想,其实就封装。能很好的实现代码复用技术
代码复用是写一次处处用(通过引用的方式),代码复制是写一次复制一次
组件的定义
非单文件组件就是一个html页面里有多个组件
先来补充下template的功能
2.2.1 template
template用来定义html结构,其实``为模板字符串。它可以随意的换行
第一种情况,有 template:
如果 el 绑定的容器没有任何内容,就一个空壳子,但在 Vue 实例中写了 template,就会编译解析这个 template 里的内容,生成虚拟 DOM,最后将 虚拟 DOM 转为 真实 DOM 插入页面(其实就可以理解为 template 替代了 el 绑定的容器的内容)。
第二种情况,没有 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?
2.2.6 一个重要的内置关系
- 一个重要的内置关系:VueComponent.prototype.proto === Vue.prototype
- 为什么要有这个关系:让组件实例对象(vc)可以访问到 Vue原型上的属性、方法。
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数前端工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合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?
2.2.6 一个重要的内置关系
- 一个重要的内置关系:VueComponent.prototype.proto === Vue.prototype
- 为什么要有这个关系:让组件实例对象(vc)可以访问到 Vue原型上的属性、方法。
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数前端工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
[外链图片转存中…(img-1jP2ZPzt-61)]
[外链图片转存中…(img-cFYEnFki-61)]
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!
[外链图片转存中…(img-CC4OK0tC-62)]
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:前端)
[外链图片转存中…(img-JnPCuXAO-62)]
最后
你要问前端开发难不难,我就得说计算机领域里常说的一句话,这句话就是『难的不会,会的不难』,对于不熟悉某领域技术的人来说,因为不了解所以产生神秘感,神秘感就会让人感觉很难,也就是『难的不会』;当学会这项技术之后,知道什么什么技术能做到什么做不到,只是做起来花多少时间的问题而已,没啥难的,所以就是『会的不难』。
我特地针对初学者整理一套前端学习资料,免费分享给大家,戳这里即可免费领取
[外链图片转存中…(img-RueAG2Pl-62)]
今天的文章 快速入门Vue(1)分享到此就结束了,感谢您的阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/bian-cheng-ji-chu/86810.html