Проверка с помощью location.path (хеш) - PullRequest
0 голосов
/ 28 августа 2018

Я использую ng-route, и мне нужно пройти проверку перед отправкой клиента на одну страницу или показать сообщение с предупреждением.

Для примера, давайте предположим, что у меня есть два типа клиентов:

$scope.idCostumer = 15;

var costumerGood = 1;
var costumerBad = 2;

Моя идея - проверить что-то вроде этого:

$scope.sendTo = function(){
   if(costumerGood === 1){
      location.path(hash).search({id: $scope.idCostumer});
   }
   else{
      alert("You can't access here);
   }
}

Я знаю, что правильный путь будет:

$scope.sendTo = function(hash){
      location.path(hash).search({id: $scope.idCostumer});
}

Но с проверкой не сработало. Ошибка консоли показывает, что location.path is not a function. Есть способ сделать проверку?

Я использую Javascript и AngularJs.

Спасибо заранее.

1 Ответ

0 голосов
/ 28 августа 2018

Я не совсем понимаю ваш вопрос, но если вы пытаетесь управлять доступом к своим страницам / компонентам, я рекомендую использовать механизм Route Guards: https://angular.io/guide/router#milestone-5-route-guards

Вы сможете реализовать свою идею в карауле. Пример охранника:

import { Injectable }       from '@angular/core';
import {
  CanActivate, Router,
  ActivatedRouteSnapshot,
  RouterStateSnapshot,
  CanActivateChild,
  NavigationExtras
}                           from '@angular/router';
import { AuthService }      from './auth.service';

@Injectable()
export class AuthGuard implements CanActivate, CanActivateChild {
  constructor(private authService: AuthService, private router: Router) {}

  canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean {
    let url: string = state.url;

    return this.checkPermissions(url);
  }

  canActivateChild(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean {
    return this.canActivate(route, state);
  }

  checkPermissions(url: string): boolean {
    if (this.authService.isLoggedIn) { return true; }

    // Store the attempted URL for redirecting
    this.authService.redirectUrl = url;

    // Create a dummy session id
    let sessionId = 123456789;

    // Set our navigation extras object
    // that contains our global query params and fragment
    let navigationExtras: NavigationExtras = {
      queryParams: { 'session_id': sessionId },
      fragment: 'anchor'
    };

    // Navigate to the login page with extras
    this.router.navigate(['/login'], navigationExtras);
    return false;
  }
}

Было бы полезно, если бы вы указали версию Angular, которую вы используете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...