Если вы посмотрите на набор текста, вы увидите, что оба значения to
и from
являются Route
. Вот их объявление интерфейса:
export interface Route {
path: string;
name?: string;
hash: string;
query: Dictionary<string | (string | null)[]>;
params: Dictionary<string>;
fullPath: string;
matched: RouteRecord[];
redirectedFrom?: string;
meta?: any;
}
Если посмотреть на определение BeforeEnter:
beforeEnter?: NavigationGuard;
Если вы посмотрите на определение NavigationGuard:
export type NavigationGuard<V extends Vue = Vue> = (
to: Route,
from: Route,
next: (to?: RawLocation | false | ((vm: V) => any) | void) => void
) => any
Итак, как мы видим, beforeEnter
возвращает closure
, который предоставляет нам 3 метода: (to, from, next)
.
Поскольку мы видим, что наборы to
и from
являются просто Route Interfaces
, а next
является функцией, в которую мы передаем аргументы, мы можем с уверенностью определить, что область действия this
действительно undefined
.
Таким образом, вы можете либо определить его в мета декларации Route
и получить к нему доступ с помощью this.$meta.cookies
, либо напрямую импортировать пакет cookie
и использовать его с cookies.get('token')
, либо вы можете увеличить тип возвращаемого значения метода beforeEnter:
beforeEnter: (to, from, next) => isLoggedIn(to, from, next, $cookies)
Вы по-прежнему не можете использовать in component guards
, поскольку они не предоставляют вам this
, поскольку они выполняются до создания компонента