角错误:StaticInjectorError(平台:核心)[e-> t]:

时间:2019-03-17 08:20:34

标签: android angular npm ionic4

使用--prod构建APK时,出现以下错误

    ERROR Error: StaticInjectorError[e -> t]: 
  StaticInjectorError(Platform: core)[e -> t]: 
    NullInjectorError: No provider for t!
    at e.get (core.js.pre-build-optimizer.js:8894)
    at core.js.pre-build-optimizer.js:9139
    at e (core.js.pre-build-optimizer.js:9083)
    at e.get (core.js.pre-build-optimizer.js:8980)
    at core.js.pre-build-optimizer.js:9139
    at e (core.js.pre-build-optimizer.js:9083)
    at e.get (core.js.pre-build-optimizer.js:8980)
    at Ua (core.js.pre-build-optimizer.js:21119)
    at e.get (core.js.pre-build-optimizer.js:21808)
    at Ts (core.js.pre-build-optimizer.js:22179)

但是它可以与Ionic Cordova构建android一起正常工作,也可以与ng serve一起工作;但是我在ng serve --prod"上遇到了同样的错误。

我该如何解决?

3 个答案:

答案 0 :(得分:2)

您正在尝试使用未在AppModule的提供程序中或component.ts内部列出的服务。将服务添加到提供商列表以使其正常运行。

在app.modules中,如果您希望该服务是全局的(与应用程序上下文有关)。

@NgModule({
    declarations: [...],
    imports: [...],
    bootstrap: [...],
    entryComponents: [...],
    providers: [
        MyService
    ]
})

或者在您的component.ts中,如果您希望该服务与所需组件相关联。

@Component({
    selector: '...',
    templateUrl: '...',
    providers: [MyService]
})

不要在两个文件中都添加它。同样,当您将服务注入app.modules或component中时,也不要忘记导入该服务。

import { MyService } from '../services/myservice';

此问题也可以为您提供帮助:Error: No provider for t

答案 1 :(得分:0)

发生这种情况是因为您没有添加用于构建模块的服务

示例:

1。组件

@Component({
  selector: 'app-sample',
  templateUrl: './sample.component.html',
  styleUrls: ['./sample.component.scss']
})
export class SampleComponent implements OnInit {

constructor(private localServiceName: YourService) {
}

  ngOnInit() {
  }

}

2。模块

@NgModule({
    declarations: [SampleComponent]
})

更改为

@NgModule({
    declarations: [SampleComponent]
    providers: [ YourService ]
})

答案 2 :(得分:0)

对于可能需要此功能的任何人:

上述原因是可能抛出 StaticInjectorError 的一种情况。然而,这并不是唯一的情况。在其他情况下,这可能是因为您尝试注入未定义的依赖项。那是: a) “无用案例”:您还没有导入服务,但您还是注入了。大多数 IDE 会为您捕捉到这一点 b) 复杂情况:假设您有依赖于另一个库的自定义库,并且您没有在每个库中设置正确的对等依赖项。这将导致模块之间的不一致(您的应用程序中同一库的不同版本)。最重要的是,如果您使用 Ahead-of-time 编译,则可能无法从正确的模块(库版本)访问您尝试导入的服务。这将导致 service = undefined,因此,就像情况 a)

从我自己的经验谈起!