在Vue Navigation Guard中访问共享数据

时间:2019-03-30 08:20:31

标签: javascript typescript vue.js vue-router

在Angular中,我们将Route Guard定义为可向其中注入共享服务的打字稿类

@Injectable()
export class AppRouteGuard implements CanActivate, CanActivateChild {

    constructor(
        private _router: Router,
        private _sessionService: SessionService,
    ) { }

    canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean {

        if (!this._sessionService.user) {
            this._router.navigate(['/account/login']);
            ...

在Vue中,Navigation Guard通常是如下定义的功能

function guard(to, from, next) { ... }

在我的项目中,我将其与路由保存在同一文件中。

我不确定登录后如何注册Vue共享服务的单个实例,以保留与用户相关的数据。

我需要的是在Navigation Guard级别解析共享服务,并检查用户是否不为空(这表示他们已登录)。

这变得非常棘手,我在这个难题上进行了谷歌搜索,并找到了将服务绑定到Vue.prototype的建议,例如

Vue.prototype.$sharedService = new SharedService();

但是我无法在Navigation Guard级别解析该实例。

在Vue中实现相同行为的正确/最佳方法是什么?

0 个答案:

没有答案