前端随笔

原创 Haroro 随笔 vue 58阅读 6 天前 举报

父子组件传参:
1.父传子:
父组件:<div msg=’hello son’></div>
子组件:<child>{{msg}}</child> //hello son
data(){
return{}
},
props:[‘msg’]
2.子传父:
子组件:<child @click=’hello’></child>
hello(){
this.$emit(‘sayhello’,’hi dad’’);
}
父组件:<div @sayhello=’showMsg’></div>
showMsg(val){
console.log(val);//hi dad
}
3.非父子组件:
通过eventHub来实现通信.所谓eventHub就是创建一个事件中心,相当于中转站,可以用它来传递事件和接收事件
eventHub.js:
import Vue from 'vue'
export default new Vue();
组件1:
import eventHub from '../js/eventHub.js';
eventHub.$emit(‘changeThing’,1);
组件2:
import eventHub from '../js/eventHub.js';
eventHub.$on(‘changeThing’,function(val){
console.log(val);//1
});

路由跳转:
1.<router-link to=’/hello’></router-link>
2.this.$router.push(‘/path’);

路由传参:

  1. this.$router.push({
    path:’/path’,
    query:{
    form:form
    }
    });
    接收参数:
    this.$route.query.form
    2.this.$router.push({
    name: hello,
    params: {
    page: '1',
    code: '8989'
    }
    })
    接收参数:
    this.$route.params.page

总结:
1.query要用path来引入,params要用name来引入,接收参数都是类似的,是$route而不是$router
2.query更加类似于我们ajax中get传参,params则类似于post,说的再简单一点,前者在浏览器地址栏中显示参数,后者不显示。 

this.$nextTick():

用法:在下次 DOM 更新循环结束之后执行延迟回调。在修改数据之后立即使用这个方法,获取更新后的 DOM。
例子:
//改变数据vm.message = 'changed'
//想要立即使用更新后的DOM。这样不行,因为设置message后DOM还没有更新
console.log(vm.$el.textContent) // 并不会得到'changed'
//这样可以,nextTick里面的代码会在DOM更新后执行
Vue.nextTick(function(){
console.log(vm.$el.textContent) //可以得到'changed'
})

路由守卫:
router.beforeEach((to, from, next) => {
if (to.meta.requireAuth) {
if (to.path == '/' || sessionStorage.getItem('login') === 'true') {
next()
} else {
router.push('/')
}
}else{
next();
}
})

评论 ( 0 )
最新评论
暂无评论

赶紧努力消灭 0 回复