例如: moment axios
例如: vue react angular
组件化: 一个组件会包含(HTML+CSS+js),完整的页面可以拆分多个组件
组件化的优点: 容易维护, 便于复用
全局安装命令
npm install -g @vue/cli
yarn global add @vue/cli
查看版本号
#二选一
vue --version
vue --V
初始化一个项目
vue create vue-coed//vue-coed名字没有固定的
# 项目名不能有大写,中文和特殊符号
选择模板和包管理器
#选择vue2
Default ([Vue2] babel, eslint)
项目命令
#二选一
Use Yarn
Use npm
进入目录
....路径\cd 项目名
启动项目
yarn serve 或 npm run serve
打包项目
yarn build 或 npm run build
# 在vue.consfig.js文件夹里面添加,要添加逗号
,devServer: {
port:3000, // 设置端口号,
open:true, // 自动打开浏览器
host:'127.0.0.1' / 'localhost' // 设置IP地址
#配置号新的端口号要重新启动项目
vue-code | 项目名称(不固定) |
---|---|
node_modules | 项目依赖的第三方包 |
public | 静态文件目录 |
favicon.ico | 浏览器小图标 |
index.html | 单页面html文件(网页浏览的) |
src | 业务文件夹 |
assets | 静态资源 |
logo.png | vue的logo |
components | 组件目录 |
App.vue | 整个应用的根组件 |
main.js | vue页面入口 |
.gttignore | git提交的忽略配置 |
babel.config.js | babel配置,兼容低版本,降级 |
package.json | 依赖包列表文件 |
README.md | 项目说明 |
yarn.lock | 项目包版本和缓存地址 |
通过data属性提供数据,data必须是一个函数
data函数需要一个返回一个对象,这个对象就代表vue提供的数据
在使用插值表达式,在模板中渲染数据
<template>
<div>
<!-- 插值表达式 -->
<p>{{msg}}</p>
</div>
</template>
<script>
export default {
data(){
return{
msg:'你好欢迎来到武汉 ',
}
}
}
</script>
<style>
</style>
注意点:
支持基本语法,支持三元运算符
使用数据在data中必须存在
能使用表达式,不能使用语法 例如: if for
不能在标签属性中使用{{}}插值
特殊的html标签属性, 特点: v - 开头
每个 v - 开头的指令 都有着自己的独立功能,vue解析时,根据不同的指令提供不同的功能
作用: 动态的设置html的标签属性
语法: v-bind: 属性名=“值”
简写: :属性名=“值”
//完整写法
<a v-bind:href="url"></a>
//简写
<a :href="url"></a>
作用: 注册事件
语法:
注意: 事件处理函数在methods中提供
<button v-on:click="money = money + 10">加十</button>
<button @click="addMony">加一</button>
<button @click="sellh(20)">加二十</button>
methods:{
addMony(){
this.money++
} ,
sellh(num){
this.money += num
}
}
<template>
<div>
<a @click="fn" href="https://www.baidu.com">去百度</a><br>
<a @click="fn2(100, $event)" href="https://www.baidu.com">去百度</a>
</div>
</template>
methods: {
fn(e) {
// 获取事件对象
// 无传参: 默认有一个参数 e
console.log('做一些事情, 不要去百度了')
e.preventDefault()
},
fn2(num, e) {
// 有传参: e 就会被顶掉, 没有 e 了, 需要手动传入 $event 实参
console.log(num)
e.preventDefault()
}
vue提供事件修饰符,可以快速阻止默认行为或阻止冒泡
作用: 控制盒子显示隐藏
v-show
语法: v-show=“布尔值”(true显示, false隐藏)
原理: 实际就是控制元素css样式: “display: none”
v-if
语法: v-if=“布尔值”(true显示, false隐藏)
原理: 实际就是在动态的创建 或删除元素节点
应用场景
如果是频繁的切换显示隐藏, 用 v-show
如果是不用频繁切换, 要么显示, 要么隐藏的情况, 适合于用 v-if
如果放在自定义组件上,v-if会控制组件的创建和销毁,让组件重新创建或销毁,执行created, destroyed等钩子函数,但v-shoe不会
<template>
<div>
<h1 v-if='isShow'>123</h1>
<h1 v-else>456</h1>
<br>
<h1 v-if='age >= 60'>广场舞</h1>
<h1 v-else-if='age >= 50'>打麻将</h1>
<h1 v-else-if='age >= 40'>蹦迪</h1>
<h1 v-else-if='age >= 18'>唱跳rap</h1>
</div>
</template>
<script>
export default {
data(){
return{
isShow: true,
age:58
}
}
}
作用: 给表单元素使用,双向数据绑定
双向数据绑定
语法: v-model=“值”
textarea,
select,
在 select 上使用时, 将 option 的 value 属性设置在 select 绑定的数据上了, 可以获取到用户选择的选项
注意事项: 使用 v-model 的时候, 需要给每一个 option 设置 value 属性, v-model 其实就是将用户选择的 option 的value 绑定给了变量
checkbox
在 checkbox 上使用时, 分两种情况
语法: v-model.修饰符=“Vue数据变量”
.number 转数字,以parseFloat转成数字类型
.trim 去除首尾空白字符
.lazy 等表单失去焦点, 才把值赋予给Vue数据变量
change 触发条件: 当用户修改内容并失去焦点才会触发
input 触发条件: 当用户修改内容会触发
作用:更新元素的innerText/innerHTML
语法:
区别:
作用: 可以遍历数组或对象,用于渲染结构
遍历数组语法:
v-for="item in数组名" item:每一项
v-for="(item.index) in 数组名" index下标
遍历对象语法:
v-for="(value, key) in 对象名"
遍历数字:
作用:遍历具体的次数 item从1开始 index下标从0开始的
v-for="item in 数字"
就地复用:vue会尽可能的就地 同级别,同位置对比虚拟dom,复用旧的dom结构,进行差异更新
就地复用好处:可以复用旧的dom结构,更新更高效
虚拟dom: 本质就是保存一个个节点信息, 属性和内容的 描述真实dom的 JS 对象
用v-bind动态设置标签的class类名
语法: :class=“数组/对象”
// :class="{ 类名: 布尔值 }" 动态判断是否要应用对应的类名
// :class="['类名1', '类名2' ...]" 同时添加多个类名
<p :class="{ yellow: age >= 18 }">我是一个开心的 p</p>
<p :class="arr">我是一个开心的 p</p>
data() {
return {
age: 18, //判断大于18变黄
arr: ['yellow', 'red', 'green'],
}
}
<style>
.yellow {
color: yellow
}
</style>
用v-bind动态设置标签的style行内样式
:style="{ css样式名: css样式值 }" 添加 css 样式
<ul>
<li :style="{ fontSize: size + 'px' }">我是一个可爱的 li</li>
</ul>\
data() {
return {
size: 36
}
}