我在从一个桶中导入服务时遇到了依赖注入的问题。
我面对的问题是这样的:
按照Angular的指南,在应用程序中有一个核心桶,然后每个文件夹都有一个桶,这是通过在每个文件夹中拥有一个index.ts来实现的。核心index.ts引用每个文件夹中的所有内容,反之每个文件夹引用特定的文件。
上述代码导致了以下错误:
Uncaught Cannot resolve all parameters for 'AuthGuard'(undefined). Make sure that all the parameters are decorated with Inject or have valid type annotations and that 'AuthGuard' is decorated with Injectable.
看着代码,我没有发现任何缺少 @Injectable 注释的问题。实际上,同样的服务在其他组件中被使用,并且是通过核心 index.ts 导入的。
我找到了一篇 文章,建议在构造函数中使用 @Inject,因为有时候当 TypeScript 转换成 JavaScript 时,元数据并未被创建。但这在我的情况下没有解决这个问题。尝试了几种方法后,我只是尝试了改变导入方式来获取服务,如下所示,错误就没有被抛出。
成功的导入:
我面对的问题是这样的:
按照Angular的指南,在应用程序中有一个核心桶,然后每个文件夹都有一个桶,这是通过在每个文件夹中拥有一个index.ts来实现的。核心index.ts引用每个文件夹中的所有内容,反之每个文件夹引用特定的文件。
...
export * from './test/index';
测试 index.ts
...
export * from './my-service.service';
代码
import { MyService } from '../../core';
...
@Injectable()
export class AuthGuard implements CanActivate {
isValidSession: boolean = false;
errorMessage: any;
constructor(
private myService: MyService
) { }
canActivate(
// Not using but worth knowing about
next: ActivatedRouteSnapshot,
state: RouterStateSnapshot
) {
return this.myService.doSomething();
}
}
上述代码导致了以下错误:
Uncaught Cannot resolve all parameters for 'AuthGuard'(undefined). Make sure that all the parameters are decorated with Inject or have valid type annotations and that 'AuthGuard' is decorated with Injectable.
看着代码,我没有发现任何缺少 @Injectable 注释的问题。实际上,同样的服务在其他组件中被使用,并且是通过核心 index.ts 导入的。
我找到了一篇 文章,建议在构造函数中使用 @Inject,因为有时候当 TypeScript 转换成 JavaScript 时,元数据并未被创建。但这在我的情况下没有解决这个问题。尝试了几种方法后,我只是尝试了改变导入方式来获取服务,如下所示,错误就没有被抛出。
成功的导入:
import { MyService } from '../../core/test/my-service.service';
或者
import { MyService } from '../../core/test';
我不确定我的应用程序中的index.ts文件是否存在问题,或者文件结构本身是否错误,但从我所看到的情况来看,它们运行良好。想知道为什么这个特定的import
会产生差异。
/core
来获取这个特定的服务,而且它很好。这就是让我感到困惑的地方。 - Daniel Grimacore/...
中是否有导入AuthGuard
的内容? - André Werlang