Angular2:的一个或多个提供者。。未定义:[?]
原始例外情况:“AddressPage”的一个或多个提供程序为 未定义:[?] 我认为我的代码是可靠的:Angular2:的一个或多个提供者。。未定义:[?],angular,Angular,原始例外情况:“AddressPage”的一个或多个提供程序为 未定义:[?] 我认为我的代码是可靠的: @Injectable() export class NavService { .. } import {NavService} from '../../../providers/services/nav-service/nav-service'; @Component({ templateUrl: 'build/pages/transaction/address/addr
@Injectable()
export class NavService { .. }
import {NavService} from '../../../providers/services/nav-service/nav-service';
@Component({
templateUrl: 'build/pages/transaction/address/address.html',
providers: [NavService]
})
export class AddressPage { .. }
然而我看到了这个错误,这到底意味着什么?在另一个看起来类似的组件中,我导入服务没有问题。此外,我的服务测试运行良好。我已经调试了几个小时了,非常感谢您的帮助
更新
独自创立
调试完成
我交换了两个组件文件(非工作和工作)的源代码,但仍然收到[?]提供程序未定义的错误。所以问题一定出在文件之外的某个地方
这是在Angular2源中引发错误的函数:
@@ -124,6 +125,10 @@ export class CompileMetadataResolver {
verifyNonBlankProviders(directiveType, dirMeta.viewProviders, 'viewProviders'));
}
moduleUrl = componentModuleUrl(this._reflector, directiveType, cmpMeta);
+ if (cmpMeta.precompile) {
+ precompileTypes = flattenArray(cmpMeta.precompile)
+ .map((cmp) => this.getTypeMetadata(cmp, staticTypeModuleUrl(cmp)));
+ }
}
var providers: any[] /** TODO #9100 */ = [];
根本原因
好的-这就是问题所在:我通过navController推送到了服务的下一个页面,但是“下一个页面”需要这个服务作为依赖项/提供者,这是不可能的,因为它是一个循环依赖项。我需要一个干净的解决方案-我们有最佳实践吗
可能的解决方案?
将字符串“MyNextPage”强制转换为键入“MyNextPage”?我试过了
console.log ("Casted", <AddressPage>nextPageString)
console.log(“Casted”,下一个引导)
…但它无法转换为函数。因此,很难识别prbm。向我们展示引导功能,几乎需要服务n组件的代码。OK更新。奇怪的是它在其他组件中工作。我也经历过这种情况,这是因为循环依赖关系。
console.log ("Casted", <AddressPage>nextPageString)