compiler.js:2175 Uncaught Error: Can't resolve all parameters for AuthService: (?, ?, ?, ?).
at syntaxError (compiler.js:2175)
at CompileMetadataResolver._getDependenciesMetadata (compiler.js:20401)
at CompileMetadataResolver._getTypeMetadata (compiler.js:20296)
at CompileMetadataResolver._getInjectableTypeMetadata (compiler.js:20514)
at CompileMetadataResolver.getProviderMetadata (compiler.js:20523)
at compiler.js:20461
at Array.forEach (<anonymous>)
at CompileMetadataResolver._getProvidersMetadata (compiler.js:20421)
at CompileMetadataResolver.getNgModuleMetadata (compiler.js:20148)
at JitCompiler._loadModules (compiler.js:25824)
我收到此错误^^,我很困惑。我是Web开发的新手。根据我所做的研究,它是由循环依赖引起的。我该如何解决?
import { Injectable } from '@angular/core';
@Injectable()
export class AuthService {
authState: FirebaseAuthState = null;
public token: any;
constructor(private af: AngularFire, private db: AngularFireDatabase, private router: Router) {
af.auth.subscribe((auth) => { this.authState = auth; })
}
get authenticated(): boolean {
return this.authState !== null;
}
get currentUser(): any {
return this.authenticated ? this.authState.auth : null;
}
get currentUserId(): string {
return this.uthenticated ? this.authState.uid : '';
}
private socialSignIn(provider: number): firebase.Promise<FirebaseAuthState> {
return this.af.auth.login({provider, method: AuthMethods.Popup})
.then(() => this.updateUserData() )
.catch(error => console.log(error));
}
private updateUserData(): void {
let path = `users/${this.currentUserId}`;
let data = {
name: this.currentUser.displayName,
email: this.currentUser.email,
}
this.db.object(path).update(data)
.catch(error => console.log(error));
}
googleLogin(): firebase.Promise<FirebaseAuthState> {
return this.socialSignIn(AuthProviders.Google);
}
signOut(): void {
this.af.auth.logout();
this.router.navigate(['/'])
}
}
我已经看到了很多关于此的帖子,但是所有人都使用注射或类似的方法。我看到的另一件事是人们说要使用其他服务。我该怎么办?
答案 0 :(得分:0)
您收到此错误消息是因为当angular尝试创建AuthService时,它将搜索您在其构造函数中拥有的所有参数
constructor(private af: AngularFire, private db: AngularFireDatabase, private router: Router) {
似乎您没有导入AngularFire,AngularFireDatabase,路由器
如果您在执行此操作时也遇到此类错误,请确保注入构造函数的所有类都是@Ingectables
如果这对您也没有帮助,您可以检查此答案https://stackoverflow.com/a/38000323/1037613似乎与之相关
答案 1 :(得分:0)
Angular无法注入您在构造函数中给定的依赖项。手动执行此操作是错误的角度执行方法。
在模块的提供者部分添加您拥有的参数。
@NgModule({
...
providers: [AngularFire, AngularFireDatabase, Router]
...
})
我认为这很有帮助。关于循环依赖,
循环依赖性: 就像您有一个依赖于B的服务,而B服务又依赖于A一样。这称为循环依赖
A-> B-> A