Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在整个angular 2/4/5 web应用程序中是否有防止退格导航的方法?_Angular_Navigation_Angular5 - Fatal编程技术网

在整个angular 2/4/5 web应用程序中是否有防止退格导航的方法?

在整个angular 2/4/5 web应用程序中是否有防止退格导航的方法?,angular,navigation,angular5,Angular,Navigation,Angular5,我需要限制整个应用程序内的退格导航。是否有任何解决方案,即我可以在整个应用程序的单个磁贴下执行的内容?为AngularJS建议的解决方案Lokisinlair也应可调整,以与Angular 5配合使用。基本解决方案只是防止密钥事件,因此您可以为您的AppComponent输入一个HostListener来全局处理此事件: @HostListener('document:keydown', ['$event']) onKeyDown(evt: KeyboardEvent) { if (

我需要限制整个应用程序内的退格导航。是否有任何解决方案,即我可以在整个应用程序的单个磁贴下执行的内容?

为AngularJS建议的解决方案Lokisinlair也应可调整,以与Angular 5配合使用。基本解决方案只是防止密钥事件,因此您可以为您的AppComponent输入一个HostListener来全局处理此事件:

@HostListener('document:keydown', ['$event'])
onKeyDown(evt: KeyboardEvent) {
  if (
    evt.which === 8 && 
    ( evt.target.nodeName !== "INPUT" && evt.target.nodeName !== "SELECT" ) 
  ) { 
    evt.preventDefault();
  }
}

对于一般逻辑,请将其转换为Angular 5实用程序。

为AngularJS提出的解决方案LokiSinclair也应可调整以与Angular 5配合使用。基本解决方案只是防止密钥事件,因此您可以为您的AppComponent输入一个HostListener来全局处理此事件:

@HostListener('document:keydown', ['$event'])
onKeyDown(evt: KeyboardEvent) {
  if (
    evt.which === 8 && 
    ( evt.target.nodeName !== "INPUT" && evt.target.nodeName !== "SELECT" ) 
  ) { 
    evt.preventDefault();
  }
}

对于一般逻辑,我将其翻译成Angular 5实用程序。

我正在开发Angular 6应用程序,在Internet Explorer IE上也面临同样的问题

我在互联网上搜索解决方案,然后在JQuery中找到了一个解决方案。不知怎的,我设法把它转换成角形

这个片段解决了这个问题

@HostListener('document:keydown', ['$event'])
  onKeyDown(evt: KeyboardEvent) {
    if (
        evt.keyCode === 8 || evt.which === 8
    ) {
      let doPrevent = true;
      const types =['text','password','file','search','email','number','date','color','datetime','datetime-local','month','range','search','tel','time','url','week'];
      const target = (<HTMLInputElement>evt.target);

  const disabled = target.disabled || (<HTMLInputElement>event.target).readOnly;
  if (!disabled) {
    if (target.isContentEditable) {
      doPrevent = false;
    } else if (target.nodeName === 'INPUT') {
      let type = target.type;
      if (type) {
        type = type.toLowerCase();
      }
      if (types.indexOf(type) > -1) {
        doPrevent = false;
      }
    } else if (target.nodeName === 'TEXTAREA') {
      doPrevent = false;
    }
  }
  if (doPrevent) {
    evt.preventDefault();
    return false;
  }
  }
  }

我正在开发Angular 6应用程序,在IE浏览器上也遇到了同样的问题

我在互联网上搜索解决方案,然后在JQuery中找到了一个解决方案。不知怎的,我设法把它转换成角形

这个片段解决了这个问题

@HostListener('document:keydown', ['$event'])
  onKeyDown(evt: KeyboardEvent) {
    if (
        evt.keyCode === 8 || evt.which === 8
    ) {
      let doPrevent = true;
      const types =['text','password','file','search','email','number','date','color','datetime','datetime-local','month','range','search','tel','time','url','week'];
      const target = (<HTMLInputElement>evt.target);

  const disabled = target.disabled || (<HTMLInputElement>event.target).readOnly;
  if (!disabled) {
    if (target.isContentEditable) {
      doPrevent = false;
    } else if (target.nodeName === 'INPUT') {
      let type = target.type;
      if (type) {
        type = type.toLowerCase();
      }
      if (types.indexOf(type) > -1) {
        doPrevent = false;
      }
    } else if (target.nodeName === 'TEXTAREA') {
      doPrevent = false;
    }
  }
  if (doPrevent) {
    evt.preventDefault();
    return false;
  }
  }
  }

通过路由器防护,我们可以阻止用户访问他们不允许访问的区域,或者,我们可以在离开某个区域时要求他们确认。要控制用户是否可以导航到或离开给定的路由,请使用这些路由防护

您可以使用以下两种方法中的任意一种:

激活 检查用户是否可以访问路由

烛台 检查用户是否可以退出路由

在这里,你的偏好是不允许回去。 我使用了一个登录条件。我给你我的样本代码。这可能对你有帮助

       import { Injectable } from '@angular/core';
      import { CanActivate, ActivatedRouteSnapshot, RouterStateSnapshot, Router } from '@angular/router';
      import { AuthenticateService } from '../authenticate.service';
      import { Observable } from 'rxjs';

      @Injectable({
        providedIn: 'root'
      })
      export class LoginAuthService implements CanActivate {

        constructor(
          private checkLogin: AuthenticateService,
          private router: Router) { }
        canActivate(
          route: ActivatedRouteSnapshot,
          state: RouterStateSnapshot): Observable<boolean> | Promise<boolean> | boolean {
            // This isLoggedIn flag is set when the token is found after login
            if (!this.checkLogin.isLoggednIn()) {                 
              return true;
            } else {
              this.router.navigate(['/componentOfMyChoice']);
            }

        }
      }

因此,当用户登录时,除非您注销,否则无法返回登录页面。希望它能帮助您

使用路由器防护我们可以阻止用户访问他们不允许访问的区域,或者,我们可以在离开某个区域时要求他们确认。要控制用户是否可以导航到或离开给定的路由,请使用这些路由防护

您可以使用以下两种方法中的任意一种:

激活 检查用户是否可以访问路由

烛台 检查用户是否可以退出路由

在这里,你的偏好是不允许回去。 我使用了一个登录条件。我给你我的样本代码。这可能对你有帮助

       import { Injectable } from '@angular/core';
      import { CanActivate, ActivatedRouteSnapshot, RouterStateSnapshot, Router } from '@angular/router';
      import { AuthenticateService } from '../authenticate.service';
      import { Observable } from 'rxjs';

      @Injectable({
        providedIn: 'root'
      })
      export class LoginAuthService implements CanActivate {

        constructor(
          private checkLogin: AuthenticateService,
          private router: Router) { }
        canActivate(
          route: ActivatedRouteSnapshot,
          state: RouterStateSnapshot): Observable<boolean> | Promise<boolean> | boolean {
            // This isLoggedIn flag is set when the token is found after login
            if (!this.checkLogin.isLoggednIn()) {                 
              return true;
            } else {
              this.router.navigate(['/componentOfMyChoice']);
            }

        }
      }

因此,当用户登录时,除非您注销,否则无法返回登录页面。希望它能帮助你

可能重复的@LokiSinclair它不是重复的,因为这个问题与angular2/4/5有关,不适用于angularjs。但它是重复的,它有一个答案-使用canDeactivate guard@Shiv解决方案可能略有不同,但问题是相同的。使解决方案适应Angular5=利润!@LokiSinclair的可能重复项它不是重复项,因为这个问题与angular2/4/5有关,不适用于angularjs。但它是这个问题的重复项,它有一个答案-使用canDeactivate守卫@Shiv解决方案可能略有不同,但问题是相同的。使解决方案适应Angular5=利润!非常有帮助,谢谢。我在实现中更改的唯一一件事是删除了keyCode和which引用,因为它们都不推荐使用。相反,我要检查$event.key=='Backspace'。很好,这对我来说真的很有用。我发现Firefox中的上述问题非常有用,谢谢。我在实现中更改的唯一一件事是删除了keyCode和which引用,因为它们都不推荐使用。相反,我要检查$event.key=='Backspace'。很好,这对我来说真的很有用。我在Firefox中发现了上述问题