- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
@NgModule({
declarations: [
AppComponent
, DesktopComponent
],
imports: [
BrowserModule,
FormsModule,
ReactiveFormsModule,
HttpModule,
AppRoutingModule,
)
],
providers: [LoginService, { provide: LocationStrategy, useClass: HashLocationStrategy } ,
{
provide: Http,
useFactory: httpFactory,
deps: [XHRBackend, RequestOptions, Router, AppComponent]
}, MasterDataService, PersonService
],
bootstrap: [AppComponent]
})
export class AppModule { }
获取错误 Error: No provider for AppComponent!添加 deps 时:[XHRBackend、RequestOptions、Router、AppComponent]。
使用过本教程https://scotch.io/@kashyapmukkamala/using-http-interceptor-with-angular2实现一个拦截器。现在我想从 Inteceptor 类调用 AppComponent 中的一个方法。
这是我必须调用 AppComponent logout 方法的拦截器方法
intercept(observable: Observable<Response>): Observable<Response> {
return observable.catch((err, source) => {
if (err.status == 401) {
localStorage.clear();
this.appComp.logout();
} else {
return Observable.throw(err);
}
});
在App组件注销方法
logout() {
console.log(" logging out");
this.authenticated = false;
$('#wrapper').attr("style", "display:none");
this.loginService.logout();
}
最佳答案
您在此处尝试使用的方法不符合 Angular 设计原则,服务应设计为 seperate concern并且应该可以被不同的组件重用并且可以测试。因此,服务不应尝试直接与组件交互。相反,组件应该监听来自服务的响应或事件,然后决定如何使用react。
我建议创建一个通用通知服务,可用于在整个应用程序中发送内部消息。此服务不仅限于将消息从您的拦截器发送到 AppComponent,还可以重复用于在您的应用程序的各个部分中传递事件。
这是一个简单的通知服务的例子,这个服务应该被注入(inject)到你的拦截器和 AppComponent 中:
import { Injectable } from '@angular/core';
import { Subject } from 'rxjs/Subject';
import { Notification } from './notification';
@Injectable()
export class NotificationService {
private notificationSubject = new Subject<Notification>();
public notifications = this.notificationSubject.asObservable();
notify(notification: Notification): void {
this.notificationSubject.next(notification);
}
}
通知类如下所示:
export class Notification {
message: string;
status: NotificationStatus;
constructor(message?: string, status?: NotificationStatus) {
this.message = message;
this.status = status;
}
}
export enum NotificationStatus {
Success = 0,
Loading = 1,
Confirm = 2,
Error = 3,
Unauthorized = 4
}
所以当你想发送消息时,注入(inject)通知服务并调用notify方法:
if (err.status == 401) {
this.notificationService.notify(new Notification('Unauthorized', NotificationStatus.Unauthorized));
return Observable.empty();
}
然后您的 AppComponent 可以从您的通知服务订阅事件:
this.notificationService.subscribe(notification => {
if(notification.status == NotificationStatus.Unauthorized) {
//Handle any unauthorized errors here like and call logout() method
}
});
关于angular - 加载时没有 AppComponent 错误的提供者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45455920/
我在AppComponent中加载数据 然后在people.component中引用这些数据 但是 people.component 首先加载。 应用组件 ngOnInit() { pr
免责声明:是的,我看到有更多“为组件 AppComponent 指定的模板不是字符串”相关问题,但没有一个描述我遇到的具体问题。 当我在 ng build 中不使用 AoT 进行编译时出现此运行时错误
我有一个 Angular 6 应用程序。起初它只是一个页面(比如说“搜索页面”),所以我将页面内容放入 app.component.html 和相关函数等到app.component.ts。所以搜索页
我正在尝试制作一个简单的单组件应用程序来测试 Angular2,但我非常坚持访问我的应用程序组件中的 RouteParams。 这是我目前所拥有的: @Component({ selector:
@NgModule({ declarations: [ AppComponent , DesktopComponent ], imports: [ BrowserM
我正在 build 一个大项目,这是其中的一部分。我的问题很常见,但是我没有找到解决它的方法。真的需要你的帮助!我收到类型错误。我很乐意提供任何帮助 Uncaught Error: Can't res
嘿,我是 Angular 和 Web 开发的新手,我学习了一些教程。 当尝试合并使用我的 Firebase 数据库时,在本地编译(使用 ng serve)时我的应用程序失败了。返回:“AppCompo
下面是我的表格。在 ngserve -o 期间工作正常。没有提出任何问题。没有出现任何错误。 Your Mobile Money Account Name
我试图从 json 响应中获取 results 字段,但是我收到错误 Property 'results' does not exist on type 'AppComponent import {
我有一个简单的应用程序,它通过 Appcomponent 加载 Material 设计 Ui。我需要在加载应用程序组件之前对用户进行身份验证。 应用组件如下 import {Component} fr
我在 Typescript Monorepo 中操作。我想向 Monorepo 添加一个带有 Jest 测试的 Angular 8 前端。但是我遇到了一些问题。 我正在使用 Angular CLI:
我正在尝试使用 Angular 6 构建应用程序,但我仍在设置所有内容。但是我的应用程序中的依赖注入(inject)似乎有问题。 它无法解析任何构造函数参数。它们都会导致 Uncaught Error
我正在以 angular 编写 spec.ts 文件并收到以下错误: Failed: Illegal state: Could not load the summary for directive A
我使用 Angular 5.2.0,我导航到: /page/28/1 对应于: {path: 'page/:albumId/:pageNo', component: AlbumPageComponen
我收到此错误并搜索了解决方案,但似乎一切都应该正确设置。 完整的错误是:“不变违规:无法在“Connect(AppComponent)”的上下文中找到“store”。要么将根组件包装在 a 中,要么将
在 AppComponent 的构造函数中,我们有一个函数可以加载一些变量并将它们设置在 environment.ts 文件中。但是我们的测试失败了,因为它使用了这些变量并单独运行并且它没有加载设置它
您好,可以在我的 AppComponent 中添加测试模块吗? 下面是我对 appComponent 的真实表示 @Singleton @Component(modules = arrayOf(Mai
在构造函数中添加表单生成器时。我一直收到错误。我已经在 app.module 中添加了 ReactiveFormsModule。 import { Component } from '@angular
在使用 CLI 生成 Angular 项目时,根组件 - AppComponent 没有 ngOnInit block ,但生成的每个其他组件都有一个 ngOnInit block 。在根组件中有一个
总结:我正在尝试将 Angular2 AoT 用于我的 Angular2 应用程序,但由于我有静态提供程序将一些值从服务器传递到 Angular2,ngc 显示了一些错误.我的问题是如何获取使用 ng
我是一名优秀的程序员,十分优秀!