在整个angular 2/4/5 web应用程序中是否有防止退格导航的方法?
我需要限制整个应用程序内的退格导航。是否有任何解决方案,即我可以在整个应用程序的单个磁贴下执行的内容?为AngularJS建议的解决方案Lokisinlair也应可调整,以与Angular 5配合使用。基本解决方案只是防止密钥事件,因此您可以为您的AppComponent输入一个HostListener来全局处理此事件:在整个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 (
@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中发现了上述问题