赞
踩
Vue是一款渐进式JavaScript前端框架
Vue 只关注视图层, 采用自底向上增量开发的设计。
Vue 的目标是通过尽可能简单的 API 实现响应的数据绑定和组合的视图组件。
作者:尤雨溪
官网:cn.vuejs.org
插件案例网址:GitHub - opendigg/awesome-github-vue: Vue相关开源项目库汇总
前端框架三架马车
特点:
el:"#app"------选择目标标签
data:{ }------指定数据
data( ){return{ }}------一个函数返回一个对象
methods:{ }------定义事件
示例:
- <script>
- new Vue({
- el: '#app',
- data: {
- message: '大家好!',
- },
- methods:{
-
- }
- })
- </script>
从现有数据计算出新的数据
例子:
- <!DOCTYPE html>
- <html lang="en">
- <head>
- <meta charset="UTF-8">
- <title></title>
- <!-- 引入vue.js -->
- <script src="../vue.js"></script>
- <style type="text/css">
- </style>
- </head>
- <body>
- <div id="app">
- <h1>计算:从现有数据计算出新的数据</h1>
- <p>n1:{{n1}}<input type="text" v-model.number="n1" /></p>
- <p>n2:{{n2}}</p>
- <p>n3:{{n3}}</p>
- </div>
- <script>
- new Vue({
- el:"#app",
- data:{
- n1:10,
- n2:5,
- },
- computed:{
- // 计算
- "n3":function(){
- return this.n1+this.n2;
- }
- }
- })
- </script>
- </body>
- </html>
监听数据的变化,并执行回调函数handler
- watch:{
- "num":{
- handler(nval,oval){},
- deep:true
- }
- }
bind绑定执行一次
insert插入执行一次
update每更新执行一次
- directives:{
- "focus":{
- update(el,binding){
- if(binding.value){ el.focus(); }
- }
- }
- }
- <input v-focus="flag">
例子:
- <!DOCTYPE html>
- <html>
- <head>
- <meta charset="utf-8">
- <title></title>
- <script src="vue.js" type="text/javascript" charset="utf-8"></script>
- </head>
- <body>
- <div id="app">
- <p>num:{{num}}</p>
- <p><input type="text" v-model.number="num"/></p>
- <!-- 显示num 使用fix管道 -->
- <p>{{num|fix}}</p>
- <p>{{3.14145|fix(4)}}</p>
- <p>{{5432185|fix(2)}}</p>
- <p>{{5432185|fix|tel(",")}}</p>
- </div>
- <script type="text/javascript">
- new Vue({
- el:"#app",
- data:{
- num:100,
- },
- // 过滤/管道(格式化数据)
- filters:{
- // 过滤名称,value过滤之前的值,arg管道的参数
- fix(value,arg=2){
- // 返回转换为小数后的值
- return value.toFixed(arg);
- },
- tel(value,arg="-"){
- // 1.转换为字符串,转数字,对数组遍历
- // 2.如果是第二位或第六位,加分隔符
-
- // 转换为数组
- var arr = String(value).split('');
- // 返回字符串
- var str = '';
- // 遍历数组
- arr.forEach((item,index)=>{
- // 默认加当前遍历元素
- str += item;
- if(index==0||index==3){
- str += arg;
- }
- })
- return str;
- },
- }
- })
- </script>
- </body>
- </html>
综合案例:
- <!DOCTYPE html>
- <html>
- <head>
- <meta charset="utf-8">
- <title></title>
- <script src="./vue.js"></script>
- </head>
- <body>
- <div id="app">
- <h3>{{msg}}</h3>
- <!-- v-model内置指令 -->
- <input type="text" v-model="msg" />
- <p v-text="msg"></p>
- <!-- 重复三次 -->
- <p v-text="msg.repeat(3)"></p>
- <!-- v-html识别标签 -->
- <p v-html="msg2"></p>
- </div>
- <script type="text/javascript">
- new Vue({
- el:"#app",//指定模板标签
- data:{
- msg:"我爱泥",
- msg2:"<strong>安阳</strong>是个好地方"
- }//指定数据
- })
- </script>
- </body>
- </html>
区别:频繁切换用v-show
一次性切换用v-if
v-show隐藏是通过css的方式隐藏节点
例子:
- <!DOCTYPE html>
- <html>
- <head>
- <meta charset="utf-8">
- <title></title>
- <!-- 引入vue.js -->
- <script src="./vue.js"></script>
- </head>
- <body>
- <div id="app">
- <p v-for="item in list">{{item}}</p>
- <!-- key优化vue的渲染(要求是唯一)推荐使用:key优化 -->
- <h3 v-for="(item,index) in user" :key="item.name">
- 姓名:{{item.name}},
- 年龄:{{item.age}}
- </h3>
- </div>
- <script type="text/javascript">
- new Vue({
- el:"#app",//指定模板
- data:{
- list:["vue","react","angular"],
- user:[
- {name:"beibei",age:19},
- {name:"dian",age:17},
- {name:"yqq",age:18}
- ]
- },
- })
- </script>
- </body>
- </html>
v-for特点:
值必须是唯一的
添加key属性可以优化v-for的渲染
让vue更好识别当前渲染的节点
特别是在排序、过滤等操作的时候
不建议key的值使用循环的索引
v-on:事件类型="响应函数"
v-on:click="say( )"
@click="say( )" 事件的简写
@click="num++" 行内事件响应
事件修饰符
@click.stop.once.prevent="num++"
事件的修饰符可以同时写多个
按键修饰符
按键修饰符例子:
- <!DOCTYPE html>
- <html>
- <head>
- <meta charset="utf-8">
- <title></title>
- <!-- 引入vue.js -->
- <script src="../vue.js"></script>
- </head>
- <body>
- <div id="app">
- <!-- @keyup监听键盘的弹起 -->
- <!-- @keyup.up 监听键盘上键,弹起@keyup.enter监听回车键 -->
- <!-- list.unshift(item)在list最前面插入item -->
- <input type="text" v-model="num"
- @keyup.up="num++"
- @keyup.down="num--"
- @keyup.enter="list.unshift(num)"
- />
- <p v-for="item in list" :key="item">{{item}}</p>
- </div>
- <script type="text/javascript">
- new Vue({
- el:"#app",
- data:{
- num:1,
- list:[]
- },
- })
- </script>
- </body>
- </html>
$event 事件监听对象
v-model 让表单的值与数据绑定再一起
<input type="checkbox"> 默认选中值是true,不选中值是false
<input type="checkbox" name="fruit" v-model="list">
//如果是多个选中的值动态添加到list数组中
修饰符
<input type="text" v-model.number="n1" />
<input type="text" v-model.trim="temp" >
1.属性 :class="值"
2. 对象 当对象的属性为真,该属性作为class绑定
:class="{'key1':true,'key2':false}"
//key1的值为真,key1被绑定
3. 数组方式 :class="[c1,c2,c3]"
样式属性名去掉 - 下一个字母大写
:style="{color:'res','fontSize':'48px'}"
什么是动画?
两个状态间的过度效果/变化
vue的动画是在元素的显示与隐藏之间切换的
vue的动画需要内置组件<transition></transition>包裹
vue会自动在动画的进入过程与离开过程添加类名
真正实现动画,还需自己写css
1.transition
in-out先进再出
out-in先出再进
- <transition name="fade"
- mode="in-out"
- enter-active-class="slideInRight animated"
- leave-active-class="slideOutLeft animated">
- </transition>
2.transition-group
1. v-enter-active 进入过程
v-enter进入前
v-enter-to进入后
2. v-leave-active 离开过程
v-leave离开前
3.创建动画形式
动画类6个css创建
keyframes关键帧
.fade-enter-active{animation: fadeIn 1s ease}
.fade-leave-active{animation: fadeOut 1s ease}
引用第三方动画库
指定进入的class与离开的class
<transition enter-active-class="slideIn animated"
leave-active-class="hinge animated">
一段可以重复利用的代码块
全局组件
Vue component("组件名",{template:``})
局部组件
const steper = {template:``}
注册组件
new Vue({
components:{steper}
})
使用组件
<steper></steper>
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。