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)
})