前置路由守卫: beforeEach 路由切换之前被调用
全局解析守卫:beforeResolve 在每次导航时就会触发,但是确保在导航被确认之前,同时在所有组件内守卫和异步路由组件被解析之后 2,解析守卫就被正确调用,如确保用户可以访问自定义 meta 属性requiresCamera 的路由:
- router.beforeResolve(async (to) => {
- if (to.meta.requiresCamera) {
- try {
- await askForCameraPermission();
- } catch (error) {
- if (error instanceof NotAllowedError) {
- // ... 处理错误,然后取消导航
- return false;
- } else {
- // 意料之外的错误,取消导航并把错误传给全局处理器
- throw error;
- }
- }
- }
- });
router.beforeResolve 是获取数据或执行任何其他操作(如果用户无法进入页面时你希望避免执行的操作)的理想位置。
afterEach 路由切换之后被调用requiresCamera 的路由:2.独享路由守卫
- const router = new VueRouter({
- routes: [
- {
- path: '/foo',
- component: Foo,
- beforeEnter: (to, from, next) => {
- // ...
- },
- },
- ],
- });
3.组件內路由守卫 可以在组件内使用者两个钩子
- beforeRouteEnter (to, from, next) {
-
- }
- beforeRouteLeave (to, from, next) {
-
- }
beforeRouteLeave 守卫。beforeEach 守卫。beforeRouteUpdate 守卫(2.2+)。beforeEnter。beforeRouteEnter。beforeResolve 守卫(2.5+)。afterEach 钩子。beforeRouteEnter 守卫中传给 next 的回调函数,创建好的组件实例会作为回调函数的参数传入。history 模式 /: 使用pushState和replaceState,通过这两个 API 可以改变 url 地址不发生请求,popState事件
hash 模式# :
hash 是 URL 中 hash(#)及后面的那部分,常用作锚点在页面内进行导航,改变 hash 值不会随着 http 请求发送给服务器,通过hashChange事件监听 URL 的变化,可以用他来实现更新页面部分内容的操作