Vue记录

132 阅读1分钟

Router

router.go() //在历史记录上倒退(填0刷新页面)
router.push() // 跳转页面

name和params搭配使用 path和query搭配使用

不传参
router.push('/user')

query:参数在问号后面
router.push({ path: '/user', query: { username: 'Jack' } })

params:参数在地址路由里
/path/:name/:id
vue2
this.$router.push({
    name:'name', //注意:这是组件的名字而不是路径
    params:{
        name:'xx',
        id:'111'
    }
})

全局路由守卫

beforeEach给单独的路由添加路由守卫,由于vue3没有beforeRouteEnter所以只能用这个

vue3
routes.beforeEach((to,from) =>{
    return false //返回false以取消导航
})
routes.afterEach((to,from) =>{
})

路由钩子函数

vue2
beforeRouteEnter(to, from, next) { 
    console.log("beforeRouteEnter"); 
    next(); 
}, 
beforeRouteUpdate(to, from, next) { 
    console.log("beforeRouteUpdate"); 
    next(); 
},
beforeRouteLeave(to, from, next) {
    console.log("beforeRouteLeave"); 
    next(); 
},

vue3移除了beforeRouteEnter
onBeforeRouteLeave((to, from, next) => {}) onBeforeRouteUpdate((to, from, next) => {})

动态路由

当我们做用户权限的时候,添加/移除路由非常有用

router.addRoute({ path: '/about', name: 'about', component: About })
router.removeRoute()

过渡效果 vue2可以直接包裹router-view标签 vue3需要使用v-slot,且被router-view包裹

vue2 使用transition标签
<transition> <router-view></router-view> </transition>

vue3使用v-slot搭配transition
<router-view v-slot="{ Component }">
  <transition name="fade">
    <component :is="Component" />
  </transition>
</router-view>

keep-alive 与过渡效果(transition)同理。 vue2可以直接包裹router-view标签 vue3需要使用v-slot,且被router-view包裹

vue2
<keep-alive>
  <router-view></router-view>
</keep-alive>
vue3
<router-view v-slot="{ Component }">
  <keep-alive>
    <component :is="Component" />
  </keep-alive>
</router-view>

nextTick

使用场景:数据源刷新但是页面没有刷新

vue2
this.$nextTick(() =>{})
vue3
import {nextTick} from vue
nextTick(()=>{})

vue2 $attrs

子组件接收所有父组件中未被props传递的数据

父组件:
<div class="demo-component" :style="styleObject" v-bind="$attrs">{{ message }}</div>

子组件:
console.log(this.$attrs.customAttribute);

vue3 watch watchEffect

watchEffect

-和 computed 对比,相当于没有返回值的 computed,当然也不能 set。

-和 watch 对比,可以自动收集依赖,无需手动指定。

computed会自动侦听使用到的数据并且返回值,watchEffect也会自动侦听但是不会返回值,但是会像watch一样执行函数,也就是自动的watch。

vue2中data是函数

当一个组件在页面上被多次使用时,我们需要让这几个组件当中的数据互相隔离,不能相互影响。

由于JS中对象只是引用对象空间的地址,所以如果data是对象,会让相同引用的组件的数据指向同一个对象空间,修改其中一个数据会影响对象空间的数据从而影响其他组件。

如果是函数,则会在组件创建时,创建一个新的对象空间,来保证多次引用也不会互相影响。