我的应用程序文件夹结构如下:
>app
app.module.ts
app.routing.ts
>>auth
login.component
auth.module.ts
atuh.routing.module.ts
现在我想使用依赖ngx-intl-input
的{{1}}模块。我想在登录组件中包含ngx-bootstrap
。
因此,如果我在intl-input
...
ngx-bootsrap
auth.module.ts
auth.module
我收到以下错误:
import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { LoginComponent } from './login/login.component';
import { AuthRoutingModule } from './auth-routing.module';
import { BsDropdownModule } from 'ngx-bootstrap/dropdown';
import { NgxIntlTelInputModule } from 'ngx-intl-tel-input';
@NgModule({
imports: [
CommonModule,
AuthRoutingModule,
BsDropdownModule.forRoot(),
NgxIntlTelInputModule
],
declarations: [LoginComponent]
})
export class AuthModule { }
我试图将它们包含在ERROR Error: Uncaught (in promise): Error:
StaticInjectorError[ComponentLoaderFactory]:
StaticInjectorError[ComponentLoaderFactory]:
NullInjectorError: No provider for ComponentLoaderFactory!
Error: StaticInjectorError[ComponentLoaderFactory]:
StaticInjectorError[ComponentLoaderFactory]:
NullInjectorError: No provider for ComponentLoaderFactory!
at _NullInjector.get (core.js:993)
at resolveToken (core.js:1281)
at tryResolveToken (core.js:1223)
at StaticInjector.get (core.js:1094)
at resolveToken (core.js:1281)
at tryResolveToken (core.js:1223)
at StaticInjector.get (core.js:1094)
at resolveNgModuleDep (core.js:10878)
at NgModuleRef_.get (core.js:12110)
at resolveDep (core.js:12608)
at _NullInjector.get (core.js:993)
at resolveToken (core.js:1281)
at tryResolveToken (core.js:1223)
at StaticInjector.get (core.js:1094)
at resolveToken (core.js:1281)
at tryResolveToken (core.js:1223)
at StaticInjector.get (core.js:1094)
at resolveNgModuleDep (core.js:10878)
at NgModuleRef_.get (core.js:12110)
at resolveDep (core.js:12608)
at resolvePromise (zone.js:824)
at resolvePromise (zone.js:795)
at eval (zone.js:873)
at ZoneDelegate.invokeTask (zone.js:425)
at Object.onInvokeTask (core.js:4744)
at ZoneDelegate.invokeTask (zone.js:424)
at Zone.runTask (zone.js:192)
at drainMicroTaskQueue (zone.js:602)
at <anonymous>
中,即便如此,我也遇到了同样的错误。知道怎么解决吗?如果需要,我可以分享更多细节。
答案 0 :(得分:3)
导入AppModule时使用BsDropdownModule.forRoot。在其他任何地方导入时只使用BsDropdownModule。
<强>为什么吗
静态forRoot()旨在向根注入器注册。这是为了确保其提供者在应用程序范围内共享。
从源代码中可以看出,forRoot
方法返回一个带提供者的模块。
https://github.com/valor-software/ngx-bootstrap/blob/development/src/dropdown/bs-dropdown.module.ts
如果只导入&#39; BsDropdownModule&#39;,则它没有提供者。在您要导入模块的任何其他位置(如AuthModule),您应该只导入BsDropdownModule
:
import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { LoginComponent } from './login/login.component';
import { AuthRoutingModule } from './auth-routing.module';
import { BsDropdownModule } from 'ngx-bootstrap/dropdown';
import { NgxIntlTelInputModule } from 'ngx-intl-tel-input';
@NgModule({
imports: [
CommonModule,
AuthRoutingModule,
BsDropdownModule,
NgxIntlTelInputModule
],
declarations: [LoginComponent]
})
export class AuthModule { }
答案 1 :(得分:2)
这里没有一个解决方案对我有用。
我得到的错误: NullInjectorError:BsDropdownDirective没有提供程序!
我偶然尝试了一下,并为我修复了它。 将此添加到app.module.ts中的提供程序:
... 提供者:[BsDropdownConfig], 引导程序:[AppComponent] ...
答案 2 :(得分:0)
我在基于CoreUI的Angular应用程序中遇到以下错误:
NullInjectorError: StaticInjectorError(AppModule)[BsDropdownToggleDirective -> BsDropdownDirective]
原来,我的问题是我在模板中放错了指令。
我在按钮中有dropdownToggle
,没有父dropdown
指令。
通过从此按钮切换按钮来解决:
<button class="btn btn-primary" type="button" dropdownToggle>
Search
</button>
。 。 。对此:
<button class="btn btn-primary" type="button">
Search
</button>