1.@vue/cli脚手架
目标: webpack自己配置环境很麻烦, 下载@vue/cli包,用vue命令创建脚手架项目
-
@vue/cli是Vue官方提供的一个全局模块包(得到vue命令), 此包用于创建脚手架项目
脚手架是为了保证各施工过程顺利进行而搭设的工作平台
@vue/cli的好处
开箱即用 0配置webpack babel支持 css.less支持 开发服务器支持
1.1_@vue/cli安装
目标:把@vue/cli模块包按到全局,电脑拥有vue命令,才能创建脚手架工程
全局安装命令
yarn global add @vue/cli
#or
npm install -g @vue/cli
注意:如果半天没动静(95%都是网速的问题),可以ctrlc
1.停止重新来
2.换一个网继续重来
查看vue脚手架版本
vue -V
总结:如果出现版本号就安装成功,否则失败
2.2_@vue/cli 创建项目启动服务
目标:使用vue命令,创建脚手架项目
===注意:项目名不能带大写字母,中文和特殊符号==
1.创建项目
#vue和create是命令,vuecli-demo是文件夹
vue create vuecli-demo
2.选择模块
==可以上下箭头选择,弄错了重新来==
3.进入脚手架项目下,启动内置的热更新本地服务器'
cd vuecil-demo
npm run serve
#或
yarn serve
只要在服务器端看见绿色的,就说明你成功了(底层node-webpack热更新服务)
2.3 @vue/cli 目录和代码分析
目标:讲解重点文件夹,文件夹的作用,以及文件里的代码意思
vuecil-demo # 项目目录
├── node_modules # 项目依赖的第三方包
├── public # 静态文件目录
├── favicon.ico# 浏览器小图标
└── index.html # 单页面的html文件(网页浏览的是它)
├── src # 业务文件夹
├── assets # 静态资源
└── logo.png # vue的logo图片
├── components # 组件目录
└── HelloWorld.vue # 欢迎页面vue代码文件
├── App.vue # 整个应用的根组件
└── main.js # 入口js文件
├── .gitignore # git提交忽略配置
├── babel.config.js # babel配置
├── package.json # 依赖包列表
├── README.md # 项目说明
└── yarn.lock # 项目包版本锁定和缓存地址
主要文件及含义
- node_modules下都是下载的第三方包
- public/index.html - 浏览器运行的网页
- src/main.js - webpack打包的入口文件
- src/App.vue-依赖包列表文件
2.4_@vue/cli 项目架构了解
目标:知道项目入口,以及代码执行顺序和引入关系
2.5_@vue/cli 自定义配置
目标:项目中没有webpack.config.js文件,因为@vue/cli用的vue.config.js
src并列处新建vue.config.js
//覆盖webpack的配置
module.exports = {
devServer :{ //自定义服务配置
open :true,//自动打开浏览器
port:3000
}
}
2.6_eslint了解
目标:知道eslint的作用,和如何暂时关闭,它是一个==代码检查工具==
例子:先在main.js随便声明一个变量,但是不要使用
main.js
import Vue from 'vue'
import App from './App.vue'
Vue .config.productionTip = false
let a = 10; //声明变量但是从未使用过
new Vue({
render : h => h(App)
}).$mount('#app')
观察发现,终端和页面都报错了
==记住以后见到这种的错误,证明你的代码不严谨==
方式1.手动解决掉错误,以后项目中会讲如何自动解决
方式2:暂时关闭eslint检查,在vue.config.js中配置后重启
module.exports = {
// ... 其他配置
lintOnSavue :false//关闭eslint检查
}
2.7_@vue/cli 单vue文件讲解
目标:单vue 文件好处,独立作用域,互不影响
Vue推荐采用,vue文件来开发项目
template里只能有一个根标签
vue文件-独立模块-作用域互不影响
style配合scoped属性,保证样式只针对当前template内标签生效
vue文件配合webpack,把他们打包起来插到index.html
<!-- template必须, 只能有一个根标签, 影响渲染到页面的标签结构 -->
<template>
<div>欢迎使用vue</div>
</template>
<!-- js相关 -->
<script>
export default {
name: 'App'
}
</script>
<!-- 当前组件的样式, 设置scoped, 可以保证样式只对当前页面有效 -->
<style scoped>
</style>
最终:Vue文件配合webpack,把他们打包起来插入到index.html,然后在浏览器运行
2.8_@vue/cli 欢迎界面清理
目标:我们开始写我们自己的代码,无需欢迎页面
- src/App.vue默认有很多内容,可以全部删除留下框
- assets 和 components 文件夹下的一切都删除掉(不要默认的欢迎页面)
==3. Vue指令==
3.0_vue基础-插值表达式
目的:在dom标签中,直接插入内容
又叫:声明渲染式/文本插入
语法:{{表达式}}
<template>
<div>
<h1>{{ msg }}</h1>
<h2>{{ obj.name }}</h2>
<h3>{{ obj.age > 18 ? '成年' : '未成年' }}</h3>
</div>
</template>
<script>
export default {
data() { // 格式固定, 定义vue数据之处
return { // key相当于变量名
msg: "hello, vue",
obj: {
name: "小vue",
age: 5
}
}
}
}
</script>
<style>
</style>
总结:dom中插值表达式赋值,vue的变量必须在data里声明
3.1_vue基础-MVVM设计模式
目的:转变思维,用数据驱动视图改变,操作dom的事,vue源码内干了
设计模式:是一套被反复使用的,多数人只晓得的,经过分类编目,代码设计经验的总结
演示:在上一个代码基础上,在devtool工具改变M层的变量,观察V层(视图的自动同步)
v-model再观察V改变M的效果
总结:vue源代码采用MVVM设计模式思想,大大减少DOM操作,提高开发效率
3.2_vue指令-v-bind
目标:给标签属性设置vue变量的值
vue指令,实际上就是特殊的html标签属性,特点:v-开头
每个指令,都有独立的作用
- 语法:v-bind:属性名="vue变量"
- 简写:属性名="vue变量"
<!-- vue指令-v-bind属性动态赋值 --> <a v-bind:href="url">我是a标签</a> <img :src="imgSrc">
总结:把vue变量的值,赋予给dom'属性,影响标签显示效果
3.3_vue指令-v-on
目标:给标签绑定事件
语法
v-on:事件名="要执行的 == 少量代码=="
v-on:事件名="methods中的函数"
v-on:事件名="methods中的函数"(实参)
简写: @事件名="methods中的函数"
<!-- vue指令: v-on事件绑定-->
<p>你要买商品的数量: {{count}}</p>
<button v-on:click="count = count + 1">增加1</button>
<button v-on:click="addFn">增加1个</button>
<button v-on:click="addCountFn(5)">一次加5件</button>
<button @click="subFn">减少</button>
<script>
export default {
// ...其他省略
methods: {
addFn(){ // this代表export default后面的组件对象(下属有data里return出来的属性)
this.count++
},
addCountFn(num){
this.count += num
},
subFn(){
this.count--
}
}
}
</script>
总结: 常用@事件名, 给dom标签绑定事件, 以及=右侧事件处理函数
3.4_vue指令-v-on事件对象
目标vue事件处理函数中拿到数据对象
语法:
1.无传参,通过形参直接接收
2.传参,通过$event代指事件对象传给事件处理函数
<template>
<div>
<a @click="one" href="http://www.baidu.com">阻止百度</a>
<hr>
<a @click="two(10, $event)" href="http://www.baidu.com">阻止去百度</a>
</div>
</template>
<script>
export default {
methods: {
one(e){
e.preventDefault()
},
two(num, e){
e.preventDefault()
}
}
}
</script>
3.5_vue指令-v-on修饰符
目的:在事件后面:修饰符名-给事件带来更强大的功能
语法:
事件名.修饰符="methods里函数"
-
.stop - 阻止事件冒泡
-
.prevent - 阻止默认行为
-
.once - 程序运行期间, 只触发一次事件处理函数
<template>
<div @click="fatherFn">
<!-- vue对事件进行了修饰符设置, 在事件后面.修饰符名即可使用更多的功能 -->
<button @click.stop="btn">.stop阻止事件冒泡</button>
<a href="http://www.baidu.com" @click.prevent="btn">.prevent阻止默认行为</a>
<button @click.once="btn">.once程序运行期间, 只触发一次事件处理函数</button>
</div>
</template>
<script>
export default {
methods: {
fatherFn(){
console.log("father被触发");
},
btn(){
console.log(1);
}
}
}
</script>
总结: 修饰符给事件扩展额外功能
3.6_vue指令-v-on按键修饰符
目标: 给键盘事件, 添加修饰符, 增强能力
-
语法:
-
@keyup.enter - 监测回车按键
-
@keyup.esc - 监测返回按键
-