vue2学习心得

156 阅读1分钟

MVVM

    M Model 数据
    V View  视图
    VM ViewModel 视图模型
     

Object.defineProperty

    let person = {
        name:'小王',
        sex:'男'
    } 
    
    Object.defineProperty(person,'age',{
        value:19,
        enumerable:true, // 控制属性是否可枚举
        writable:true,   // 是否可修改
        configuable:true,  // 是否可删除
        get:function(){},
        set:function:{}
    })

数据代理 obj2没有x属性,访问obj2.x返回obj.x,并能修改obj.x
数据劫持,数据代理,计算属性全利用这个原理
    let obj1 = {
        x:100,
    } 
    let obj2 = {
        y:200,
    } 
    使用Object.defineProperty的get、set方法
    Object.defineProperty(obj2,'x',{
        get:function(){return obj1.x},
        set:function(value){obj1.x = value}
    })

vue数据代理

vue数据代理.png

    vue定义的data,被vm._data数据代理,并复制给vm对象下面,
    模板中可以使用vm下的所有属性,
    vm._data.a = vm.a 

计算属性&监听属性

计算属性&监听.png

vue数组响应式问题

image.png

数组直接替换可以 vm.$set和vue.set不能修改vm和vm._data的数据

自定义指令

image.png

全局事件总线

    main.jslet  D = Vue.extend({})
    let d = new D()
    Vue.prototype.$bus = d
    或者
    new Vue({
        el:"#app",
        render:h=>h(App),
        beforeCreate(){
            Vue.prototype.$bus = this 
        }
    })
    
    发事件
    this.$bus.$emit("shijian1",(data)=>{
        console.log(data)
    })
    接收事件
    this.$bus.$on("shijian1",{a:1})
    
    销毁钩子中销毁事件
    this.$bus.off() 

消息订阅与发布

image.png

    import pubSub from  'pubsub-js'
    
    发事件
    pubSub.piblish("hello","你好")
    
    接收事件
    this.pId = pubSub.subscribe("hello",(_,data)=>{
        console.log(data)
    })
    
    销毁钩子中销毁事件
    pubSub.unsubscribe(this.pId) 

vue代理

    vue.config.jsdevServer:{
        proxy:'http://localhost:8080'
    }
    //
     devServer:{
        proxy:{
            '/api':{
                target:'http://localhost:3000',
                oathWrite:{'^/api':''}
            }
        }
    }

vuex

image.png

image.png

image.png

    components
    this.$store.dispatch("jia",2)
    this.$store.commit("JIA",2)

    action 
    jia(context,value){
        context.commit("JIA",value)
    }

    mutation
    JIA(state,value){
        state+=value
    }
    

getters

image.png

mapstate

image.png

image.png

vue-router

image.png

image.png

image.png

image.png

image.png

    main.js
    import VueRouter from 'vue-router'
    import Vue from 'vue'
    
    Vue.use(VueRouter)
    
    router.js
    import VueRouter from 'vue-router'
    import A from '/A'
   
   export default new VueRouter({
       routes:[
           {
               path:'/a',
               component: A
           }
       ]
   })
    

路由守卫

全局守卫
    router.beforeEach((to,from,next)=>{})
    
    router.afterEach((to,from)=>{})

image.png

学习视频地址: www.bilibili.com/video/BV1Zy…