vue总结

模拟数据

在dev-server中,使用express提供的接口

var appData = require("./xxx.josn");
var dataClassify1 = appData.dataClassify1;
...

获取接口
var apiRoutes = express.Router();

配置接口
apiRouters.get("/dataClassify1",function(req,res){
    res.json({
        erron:0, (自定义的返回值,标识错误或者权限等)
        data: dataClassify
    })
});
使用配置
app.use("/api",apiRoutes);
当路由为api/dataClassify1时,返回虚拟后台数据

guide

vue实例

1.通过new vue({})实例化,extend来创建可复用已经预定义的vue组件
2.实时监控的data属性通过两种方式添加:
.通过return
.通过 datas = {},然后在vue实例里面 data=datas,data将代理 datas,两者等价
3.实例的方法属性通过$来辨别
```
关于数据绑定
分为:
一次性绑定 v-once
单向绑定 大部分的绑定 通过v-bind 或者 {{}}
双向绑定 存在与data中的,通过v-model绑定input等可输入控件的值与data中数据 
```

模版

一.插值:
1.{{}}
2.v-once 该节点所以插值只是一次性插值
3.v-html 插入html文本(安全问题)(此时不能通过{{}}绑定值,只能通过v-bind:xx=""来绑定)
4.模版内可使用表达式(被放在沙盒中),但是只能使用是单条语句且只能访问全局变量的一个白名单,如Math,Date,不能访问用户自定义的全局变量
二.过滤器:
1.添加在mustache的尾部,由管道符 | 指引
2.使用实例方法filter或者类中filters中去注册
3.{{a|filterA()|filterB()}}--a值通过两个过滤器
指令:
1.v-bind:xx="xxx"  v-bind: 缩写 :
2.v-on:click.prevnet="xx" 指令:参数.修饰符 v-on: 缩写 @

计算属性

    当{{a}} {{ a*xxx+xx }} {{c}}  而 第二个中计算太多时,可以将第二个替换为计算属性 {{b}}
    computed : {
        b :  function (){  ---默认是get
            return a*xxx...
        },
        c :{
            set : function(newc){
                    this.a=newc...;
            },
            get :function(){
                    return axxx...
            }
    }
    值是被缓存的 , 只有当依赖数据改变时,才会去更新通过computed更新值
    对比methods 
    return this.a + new Date();
    --- computed(计算属性) 只有在a变化才会变化
    --- methods(触发方法) 在两个任意变化都会变化
    --- watch(监听数据) watch执行异步或者更昂贵的操作,如,知道操作停止才计算属性等...

class与style绑定

绑定class

1.直接绑定值
    v-bind:class="active"
2.判断+复合
    :class="{a:isa , b:isb}" class="else"  data中设置isa,isb,渲染class="a,b,else"
3.设置为对象
    :class="{{classobj}}" data中设置classobj:{a:true,b:true},渲染class="a,b";
4.设置为返回对象的函数
    computed:{
        class_obj:function(){
            ...处理...
            return {
                a:isa,
                b:isb
            }
        }
    }
5.设置为数组
    [{a:isa},b,c]

绑定style

1.{color:color,fontSize:size+'px'} data中 color:"red",size:100
2.直接绑定对象 "{classobj1,classobj2}" 
classobj1:{
    color:"red"
}
Vue自动添加前缀

条件列表渲染

条件渲染
v-if="istrue" v-show="ok"
v-else

列表渲染
1.数组arr:[{a:1},{b:2}]
v-for="(item,index) in/of arr"
2.对象obj:{a:1,b:2}
v-for="(value,key,index) in obj"
3.整数迭代 
v-for="n in 10"

事件处理器

通过v-on/@ 参数 修饰符 绑定methods中的方法
一:获得event对象
1: @click="fn"  fn:function(e){e是evnet对象}
2: @click="fn(parm,$event)" fn:function(parm,evnet){}...
二:事件修身符
1.stop 阻止继续往上冒泡
2.prevent 阻止默认事件
3.capture 使用事件捕获模式
4.self 只有在该元素本身触发,才会执行回调
三:按键别名...

表单控件

v-model是根据类型自动绑定数据的
修饰符: 
lazy---实事改为change事件中同步 
number---能转为数字的转数字,为NaN的,为原值,配合type=number(值为字符串) 
trim---过滤空格 , 多个空格合为一个

组件

一:注册
1.创建在template中
 vue.component("app",{
    data:datas,
    template:"<i>{{a}}</i>"
 })
2.创建在<script type="text/x-template"> ... </> 
3.创建在<template>...</>
然后 vue.component("app",{
    teplate:"#app"
})
---其中,分为两步,先生vue.extend({}),创建一个组件构造器,然后用vue.component({})注册,这里是用语法糖将两步合在一起,这些是全局注册的

4.父子组件
 vue.component("app",{
    data:datas,
    template:"<i>{{a}}<app2></app2></i>",
    components:{
        "app2":app2
    }
 })
 5.局部子组件
 var app = {
    template:"#app"
 }
 new vue({
    component{
    "app":app
    }
 })
 
 **组件中的data和el必须使用函数

二.props组件数据传递

1.props-down 
    *子组件内 props:{} 注册
     子组件元素 <子组件 :msg="变量"></> -- 动态绑定
    *msg="xx" xx会作为字符串常量传下去 -- 静态传值
    *初始化传值:通过data return msg = this.parentMsg
    *不能在子组件中直接改变props的值,可以通过computed
    msg:fn(){
        return this.parentMsg+msg2  == msg2改变时改变值
        } ---> computed的值,不能再直接更改,如methods中使用 this.msg = "xx" ,不起作用
    
    props的验证属性:
        props:{
            a:{
            dafault:"默认值",
            required:true 必要性
            type:Numner/String/Object... ,[string,number]  === 原生验证
            validator:fn(val){return val>0} ===自定义验证
            }
        }

2.event-up

    子组件上:
        1. <模版里面 v-on:click="childEvent">
            methods:{
                childEvent:function(){
                    this.$emit("self_difine_evnet")
                }
            } --- 当子组件触发事件,发出emit定义的事件
        2. <子组件  v-on:self_difine_evnet = "parentEvent"> --父组件触发事件
            或者子组件触发原生事件
           <子组件  v-on:click.native="parentEvent"> --当子组件内点击时,触发父组件事件
3.非父子组件通信通过空vue实例,更复杂的通过状态管理插件;
三.slot -- 内容分发(父组件往子组件内插入html代码)
    子组件中:slot 也可以加name
    父组件中 子组件元素内加元素 也可以元素上加slot="xx"
    默认下,在父组件中 往子组件内加的元素 ,是不会被显示的
    如果加了slot ,则将这些元素插入slot中,如果有name,则按照name分别插入
    
    动态组件
    通过 <keep-alive><component v-bind:is="组件"></></keep-alive>
        父组件内
        data:{组件:a} 
        components:{"a":a,"b":b}
        通过改变data.组件来在同一个挂载点上切换组件    
        <keep-alive> 保存了组件在内存中,避免重新渲染
四.杂项
异步组件(按需加载)
递归组件
组件命名约定

深入响应式原理

过渡效果

1.使用默认的或者重置的class:
name-enter 出现时,立刻添加,然后立刻删除这个class,只是为transition添加初始状态
name-enter-active 从enter过渡到这个状态,过渡时间完成后删除
name-leave
name-leave-active  这些只会在运动状态时添加上去,运动完后是默认的那些class
<transition name="xx">
    <p>toggle<p>  --- class会添加到p上
</transition>
默认名字是v ,添加名字重置前缀

2.使用自定义类名--用来搭配 如animated.css库
<transition 
enter-class=""
enter-active-class="animated tada"
leave-active-class=""
leave-class="" >

3.使用js钩子函数--用来搭配 如velocity.js等js动画库等
before-enter
enter           ---done()回调 , 当仅通过js完成过渡效果时,为必须
after-enter
enterCancelled

befor-leave
leave            ---done()回调
after-leave
leaveCancelled

然后在methods里面注册,依然还是会在元素内添加类名,只是效果可以由js完成
还可以自定义钩子和初始化渲染的过渡
原文地址:https://www.cnblogs.com/LiangHuang/p/6413908.html