网站搜索

typescript - Angular 5 服务中的 Window 对象


我有一个 Angular 项目,用户面板是特定的。所有页面都是 PHP,只有面板是 Angular。如何在服务中使用 window 对象?

我想使用 window.location 完全执行与 HTML 中 href="/" 相同的操作,这会把我从 Angular 项目(面板)返回到主站。为什么?当我尝试获取用户时,如果它返回的状态例如 401、404,表示用户无法访问面板,则必须导航到主站。

我尝试了几种使用路由 navigate 或 navigateByURl 的方法,但地址总是被设置为 Angular 中的 baseHref,因此我无法跳出。 我尝试在 providers 中传递 {provide: Window, useValue: window },并在服务的构造函数中注入 window,这在我的本地主机上可以工作,但当我在 CLI 中运行 ng build 时,它给我发送了一个错误:

错误 在 Error: 无法解析 ../my-app/src/app/user.service.ts 中 UserService 的所有参数: (?, [对象对象], [对象对象], [对象对象], [对象对象])。

有人吗?

在 AppModule 中:

providers: [UserService, DatePipe, {provide: Window, useValue: window }],

在 UserSerice 中:

constructor(private window: Window, private location: Location, private HttpClient: HttpClient, private route: ActivatedRoute, private router: Router){};

以及 UserService 中的函数,用于根据状态进行导航:

if(data == 403) {
  this.setError('You must log in', 'danger');

  this.window.location.assign("/");
  ...
}

答案#1

ERROR in Error: Can't resolve all parameters for UserService in ../my-
app/src/app/user.service.ts: (?, [object Object], [object Object], 
[object Object], [object Object]).

此错误发生是因为 Angular 正在尝试将 Window 和 Location 注入到您的服务中,但找不到带有 @Injectable 装饰器的相应类。@Injectable 装饰器表示 Angular DI 系统用于创建该类的一个或多个实例。此外,window 是一个全局可访问的对象。

所以你可以使用 window.location.assign("/"); 而不是 this.window.location.assign("/");

或者任何这些:

  1. window.location.href = 'http://...';
  2. window.location = 'http://...';