1.概述
2.基础
3.指令
4.存储
5.绑定
6.过滤filter
7.动画
8.组件
先给标签绑定一个id和title属性,例如:
<div id="app">
div>
new Vue({el:{ },data:{ }})
或 var app = new Vue({el:{ },data:{ }})
<div id="app">
<p v-text="msg">p>
<p>{{msg}}p>
div>
<script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js">script>
<script>
new Vue({
el:"#app",
data:{
msg:"你好 Vue"
},
script>
<div id="app">
<p v-bind:title="title">{{msg}}p>
div>
<script>
new Vue({
el:"#app",
// data:function() 的简写
data(){
return{
msg:"你好!",
title:"Vue",
}
script>
v-if 和 v-show区别:
v-if | v-show |
---|---|
节点隐藏,条件渲染(条件为真,元素将会被渲染,条件为假,元素会被销毁) | css隐藏(通过display:none) |
一次性切换显示隐藏时使用(首次渲染开销小) | 频繁切换时使用(切换开销小) |
节点直接删除,不占空间 | 控制台输出仍显示DOM,即节点不消失 |
有配套的 v-else-if 和 v-else | 没有 |
可以搭配 template 使用 | 不行 |
采用 v-on:事件类型=“响应函数”
例如点击事件执行say函数 v-on:click=“say()” 简写为 @click=“say()”
<div id="app">
<input type="text" v-model="num" @keyup="KeyHd($event)">
div>
<script>
new Vue({
el:"#app",
data:{
num:1
},
methods:{
// $event可改 只要下边几个$event一致即可
// 点击向上的鼠标按键 input值加1
KeyHd($event){
console.log($event);
if($event.key==="ArrowUp"){
this.num++;
}
if($event.key==="ArrowDown"){
this.num--;
}
}
}
})
script>
v-model 让表单的值与数据绑定在一起
<div id="app">
<input type="checkbox" v-model="sel">同意协议{{sel}}<br>
<button :disabled="!sel">注册button><hr >
div>
<script>
new Vue({
el:"#app",
data:{
sel:false,
}
})
script>
localStorage:
我们可以传给 v-bind:class 一个对象,以动态地切换 class:
<style type="text/css">
.col{
color: red;
}
style>
<div id="app">
<h3 v-bind:class="col" @click="col=''">当属性h3>
div>
<script>
var app=new Vue({
el:"#app",
data:{
col:"col",
}
})
script>
当对象的属性值为真,该属性作为class绑定
:class=“{‘类名1’:true,‘类名2’:true}”
<style type="text/css">
.active{
color: #F49800;
}
.big{
font-size: 24px;
}
style>
<div id="app">
<button :class="{'active':true,'big':true}">Abutton>
<button :class="{'active':false}">Bbutton>
div>
:class=" [‘类名1’,‘类名2’] "
v-bind:style 的对象语法十分直观——看着非常像 CSS,但其实是一个 JavaScript 对象。CSS 属性名可以用驼峰式 (camelCase) 或短横线分隔 (kebab-case,记得用单引号括起来) 来命名
格式:
**注意:**下个字母大写,eg:fontSize
<div id="app">
<p :style="{'fontSize':'24px','color':'pink'}">我是可爱的文字p>
<p :style="styleObj">我是可爱的文字p>
div>
<script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js">script>
<script>
var app=new Vue({
el:"#app",
data:{
styleObj:{
"fontSize":"24px",
"color":"plum"
}
}
})
script>
<div id="app">
<p>{{num|fix}}p>
<p>{{19966668888|tel}}p>
div>
<script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js">script>
<script>
var app=new Vue({
el:"#app",
filters:{
// tel过滤名称 value过滤前的值 arg管道的参数(保留的位数长度)
fix(value,arg=2){
// 转化为有两位小数点的数字(四舍五入)
// return value.toFixed(2)
return value.toFixed(arg)
},
tel(value,arg="-"){
// 转字符串 转数组 对对象遍历
var arr = String(value).split('');
var str = '';
arr.forEach((item,index)=>{
str+=item;
if(index==2||index==6){
str+=arg
}
})
return str;
}
}
})
script>
v-enter 进入前; v-enter-to 进入后
v-leave 离开前; v-leave-to 离开后
方法1: 创建6个css类
<style>
.fade-enter-active{
transition: all 1s ease;
}
/* 进入前 */
.fade-enter{
opacity: 0;
}
/* 进入后 */
.fade-enter-to{
opacity: 1;
}
/* 元素离开过程 */
.fade-leave-active{
transition: all 1s ease;
}
.fade-leave{
opacity: 1;
}
.fade-leave-to{
opacity: 0;
}
style>
<div id="app">
<p>
<transition name="fade">
<img src="touxiang.png" width="200px" v-if="flag">
transition>
p>
div>
<script>
var app=new Vue({
el:"#app",
data:{
flag:true,
}
})
script>
方法2: 通过关键帧动画实现 @keyframes
<style>
@keyframes fadeIn{
from{opacity: 0;transform: rotate(-180deg);}
to{opacity: 1;transform: rotate(0deg);}
}
@keyframes fadeOut{
0%{opacity: 1;transform: rotate(0deg);}
100%{opacity: 0;transform: rotate(180deg);}
}
.fade-enter-active{
animation: fadeIn 1s ease;
}
.fade-leave-active{
animation: fadeOut 1s ease;
}
style>
方法3: 第三方动画库,引入animate.css
<link rel="stylesheet" type="text/css" href="animate.css"/>
<div id="app">
<button @click="flag=!flag">切换button>
<p>
<transition name="fade" enter-active-class="bounceInRight animated" leave-active-class="hinge animated">
<img src="touxiang.png" width="200px" v-if="flag">
transition>
p>
div>
Vue.component(“btn”,{template:``})
2.局部组件 ``内有且仅有一个根节点
const steper={template:``},data(){return {n:1}}
3.注册组件
new Vue({components:{steper}})
4.使用组件
body中输入steper标签
一段可以重复利用的代码块
注意: data的写法是函数的样式
<div id="app">
<btn>btn>
<btn>btn>
div>
<script>
// 定义一个全局的组件,名称是btn(哪个vue实例都可使用)
Vue.component("btn",{
// 定义组件的模板
template:``,
// 定义组件的data数据
data(){return {num:1}}
})
var vm = new Vue({
el:"#app",
data:{n:100}
})
script>
<div id="app">
<steper>steper>
<steper>steper>
div>
<script>
// 定义一个局部的组件 组件有且仅有一个根节点
const steper = {
template:`
`,
data(){return {n:1}}
}
new Vue({
// 注册组件
components:{steper},
el:"#app",
})
script>
vue更多资料