vue搬砖笔记

408 阅读2分钟

vue父子组件传值

1. 子组件直接调用父组件的方法,传递自己的_uid,  this.$parent.cut(this._uid);
父组件可以通过this.$children.find(child => child._uid === _uid)找到那个子组件
2. 属性v-bind=$attrs默认把所有的属性往子子孙孙传,路过的子组件,不使用其中的任何属性,就可以不下props:‘xxx’接收,用到就写,而且用一个少一个。ps:inheritAttrs : false, 没有显示接收的属性,虽然没用 但是我不希望增加到dom元素上
3. A组件给B传了很多事件,如果B的儿子也想要那些孙子,就直接写在儿子上v-on=$listeners,儿子组件里直接$listners.xxx()调用
4.    直接传函数给子组件
      <Son1 :money="mny" :change-money="changeMoney"></Son1>
      变种,跟上面的没多大区别只不过需要emit调用
      <Son1 :money="mny" @a="changeMoney"></Son1>
      
      <Son1 :value="mny" @input="val=>mny=val"></Son1>
      可以更换成  是 value+input的语法糖
      <Son1 v-model="mny"></Son1>
      
      .sync语法 语法糖
      <Son1 :money="mny" @update:money="val=>mny=val"></Son1>
      <Son1 :money.sync="mny" ></Son1>
      
5.变更v-model默认的value跟input事件
    model:{
        prop:'mny', // 默认是 value属性
        event:'change' // 默认事件名叫input
    },
    ps不写默认就是翻译成:value=xxx @input=fn
    写了就翻译成 :mny=xxx @change=fn

6. 父组件写个跟mounted平级的方法provide(){return {demo: obj} },
   这个obj会被添加到每个子组件的实例里,使用的时候
   inject: demo(对应的返回对象的key)
   
7. 给组件ref也行,ref能拿到组件实例

8. 指令的生命周期方法的参数里bindings.value是对应的值,而不是表面的字符串,vnode参数的context属性能拿到使用指令的节点所在的那个上下文(组件)

vue3搬砖笔记

1.`setup`的返回值,template computed watch method,各种生命周期,都可以访问,且是响应式的(一定要自己toRefs props,ref(0) {value:  0}, toRef prop 把返回值变成响应式的)。 当然setup内也有对应的,生命周期钩子:

- onMounted

- const counter = ref(0)
  watch(counter, (newValue, oldValue) => {
    console.log('The new counter value is: ' + counter.value)
  })

- const twiceTheCounter = computed(() => counter.value * 2)


2.自定义hook就是函数命名以use打头,里面写法跟setup函数里遵循相同的规范,导出即可

vue-router

- beforeEach(to,from,next)
  - 取路由元信息可以.meta  .name
- beforeResolve
- afterEach
--------------------
- beforeEnter
--------------------
- beforeRouteEnter
- beforeRouteUpdate
- beforeRouteLeave 

vuex

store可以在api里直接commit、dispatch没影响

jwt

  • jwt就是resonse回一个token,使用secret签名,设置过期时间
 // 生成
 const token = require('jsonwebtoken').sign({ username:'admin' }, secret, { expiresIn:20 });
 // 验证
 jwt.verify(token,secret,(err,decode)=>{ 
     
 });
 前端每次请求就把token给带上axios.create().interceptors.request.use
 遇到f5刷新页面数据就丢了,可以存localstorage里
 jwt优点,对比cookie,服务器重启登录不会失效;
 还有解决方案,登录状态放redis里
 
 
let jwt = require('jsonwebtoken');
let secret = 'lrj'

let token = jwt.sign({username:'admin'},secret,{expiresIn:20  })
jwt.verify(token,secret,(err,decode)=>{ // decode => {username:'admin'}
  console.log(err);
  console.log(decode);//{ username: 'admin', iat: 1551949363, exp: 1551949383 }
});