这是一个初学者角度的问题。
我的角度应用程序包括多个功能模块。我通过从角cli生成保护来使用AuthGuard,然后在我的应用路由模块中使用CanActivate,如下所示:
import { NgModule } from '@angular/core';
import { Routes, RouterModule } from '@angular/router';
import { AuthGuard } from './auth.guard';
const routes: Routes = [
{path:'login',loadChildren:'./login/login.module#LoginModule',canActivate:
[AuthGuard]},
{path:'home', loadChildren:'./user/user.module#UserModule',canActivate:
[AuthGuard]},
{path:'cart',
loadChildren:'./cart/cart.module#CartModule',canActivate:[AuthGuard]},
{path:'customer',loadChildren:'./customer/customer.module#CustomerModule',canActivate:[AuthGuard]}
];
@NgModule({
imports: [RouterModule.forRoot(routes)],
exports: [RouterModule]
})
export class AppRoutingModule { }
在我的auth guard中,我编写了防止用户访问未经授权的路由的条件:
import { Injectable } from '@angular/core';
import { CanActivate, ActivatedRouteSnapshot, RouterStateSnapshot } from
'@angular/router';
import { Observable } from 'rxjs/Observable';
import { Router } from '@angular/router';
@Injectable()
export class AuthGuard implements CanActivate {
constructor(private router: Router) { }
canActivate(
next: ActivatedRouteSnapshot,
state: RouterStateSnapshot): Observable<boolean> | Promise<boolean> | boolean
{
if(["user","customer","cart"].indexOf(localStorage.pass)>=0){alert("auth
guard!");
return true;}
else
this.router.navigate(['/login']);
}
}
构建后,在重建期间检测到loadChildren中的重复路径中出现警告。我们将采用检测到的最新版本并覆盖它以节省重建时间。您应该执行完整构建以验证您的路由是否不重叠。
所以我谷歌了一下,发现了这个评论,在最后一条路径上加上逗号后,警告消失了。
但在此之后,我登录到我的应用程序,控制台中出现了以下消息:限制历史状态更改以防止浏览器挂起,应用程序被卡住。
有什么想法为什么?
编辑:我最终通过使用“canLoad”而不是“canActivate”实现了它,但如果有人能提供关于这个问题的更多见解,那就太好了。
签入Gaurd路径中的一个正在尝试作为循环加载多次。这是我的问题。。
在我的例子中,我有一个无限循环。
如果在路由中使用通配符(*),请确保它是列表中的最后一个。您应该首先定义所有其他路由。
{ path '/', component: HomeComponent },
{ path 'profile', component: ProfileComponent },
// All your other routes should come first
{ path: '404', component: NotFoundComponent },
{ path: '**', component: NotFoundComponent }
删除登录路由中的canActivate。是循环。
当用户试图关闭页面时(单击浏览器窗口上的X按钮或离开页面),我需要发送一条消息,如“确定吗?”并执行一些操作。 我正在使用离子3,这是我的配置 cli包:(/home/ubuntu/workspace/mHS/node_modules) 全球套餐: 本地套餐: 系统: 杂项: 我尝试了不同的方法,但没有成功: 1-离子生命周期钩 2-主机侦听器 } 3-超文本标记语言 我错过了什么?
历史状态管理是现代Web 应用开发中的一个难点。在现代Web 应用中,用户的每次操作不一定会打开一个全新的页面,因此“后退”和“前进”按钮也就失去了作用,导致用户很难在不同状态间切换。 要解决这个问题,首选使用hashchange 事件(第13 章曾讨论过)。HTML5 通过更新history 对象为管理历史状态提供了方便。 通过hashchange 事件,可以知道URL 的参数什么时候发生了变化
问题内容: 我在网站上使用ajax。 如果用户输入查询并选择类别,我将使用ajax更新结果页面。我还用哈希值更新了url,该值显示了以分隔的查询和类别。 我想要的是,当按下浏览器的后退按钮时,我希望不重新加载就显示以前的结果。我得到的是该URL具有先前的值,但结果未更新。 问题答案: 您可以使用:“ Yahoo! UI库:浏览器历史记录管理器 ”
我正在实现一个kiosk模式应用程序,我已经成功地使应用程序全屏显示,在4.3之后没有状态栏出现,但在4.3和4.4中无法隐藏状态栏,因为当我们在屏幕顶部向下滑动时,状态栏会出现。 我已经试着在 在清单中指定全屏主题 设置窗口标志ie setFlags setSystemUi可视性 可能重复,但未找到具体解决方案 永久隐藏Android状态栏 最后的事情我想要的是,如何隐藏状态栏永久在一个活动??
问题内容: 这就是我们防止浏览器缓存JS和CSS文件的方式。这似乎有点hacky ..有更好的方法吗? 更新:我们要防止缓存的原因是为了确保在执行新发行版时加载较新版本的文件。 问题答案: 您希望缓存CSS和JS。当它们回来时,它加快了网页的加载。添加时间戳后,您的用户将不得不一次又一次下载它。 如果要确保它们始终具有新版本,则要使构建系统在文件末尾添加一个构建号而不是时间戳。 如果您只是在开发中
问题内容: 我需要停止浏览器存储用户名和密码值,因为我正在处理包含更多安全数据的Web应用程序。客户要求我这样做。 我尝试了HTML表单和密码字段中的属性。但它无法在最新的浏览器(例如Chrome 55,Firefox 38+,IE 11等)中运行。 最好的解决方案是什么? 问题答案: 感谢您给我回复。我点击了以下链接 禁用浏览器的“保存密码”功能 我通过仅在输入中添加&属性来解决此问题,如下所示
问题内容: 我尝试使用以下代码在关闭浏览器窗口时收到警报: 它可以工作,但是如果页面包含一个超链接,则单击该超链接会引发相同的警报。仅在关闭浏览器窗口时才需要显示警报,而在单击超链接时则不需要。 问题答案: 保持您的代码不变,并使用jQuery处理链接:
问题内容: 我试图找出如何抑制应用程序中的http请求和响应错误,例如,当对服务器提出错误请求时,我不希望该 错误记录到浏览器控制台中。我尝试覆盖$exceptionHandler,但是该逻辑适用于除HTTP 错误以外的所有异常,这些异常仍记录在浏览器中。我还创建了HTTP拦截器,但是全局400 Bad Request错误出现在我放入我的逻辑之前 : 那也没有抑制错误,有什么想法吗? EDIT 问