我最近迁移到Angular 2 RC6,现在迁移到2.0.0。
我有一个从另一个模块注入模块的模块。
模块声明代码:
import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { AdminAppComponent } from './Components/admin-app.component';
import { Module2 } from "./module2/module2";
@NgModule({
imports: [BrowserModule, Module2],
declarations: [AdminAppComponent],
bootstrap: [AdminAppComponent],
providers: []
})
export class AdminAppModule {
}
组件代码:
import { Component } from "@angular/core";
import { TestService } from "./../module2/services/TestService";
@Component({
selector: "yadm-app",
templateUrl: "/templates/admin/app/admin-app.tpl.html"
})
export class AdminAppComponent {
constructor(private ser: TestService) {
}
}
导入的模块(Module2)代码:
import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { BrowserModule } from '@angular/platform-browser';
import {TestService } from "./Services/TestService";
@NgModule({
imports: [BrowserModule],
declarations: [],
bootstrap: [],
providers: [{ provide: TestService, useClass: TestService }]
})
export class Module2 { }
和服务代码:
import { Injectable } from '@angular/core';
@Injectable()
export class TestService {
getText(): string {
return "texxxt";
}
}
我收到错误:“没有TestService提供商”。知道它在RC5中正常工作。
我也注意到TestService.js正在加载两次。
那么,发生了什么?
由于
答案 0 :(得分:6)
我认为经过几天的挣扎,我找到了答案!
所有关于进口中的大写字母。
所以当我写下打字稿时:
--dbpath
angular 2将此视为两个单独的文件,并触发两个获取查询以加载文件!!!
之后的后果非常奇怪,例如组件未被识别为模块的一部分,而着名的消息传递表明没有给定服务的提供者。
全部谢谢!
答案 1 :(得分:0)
我测试了你的代码并且它正在运行。
我刚刚将我的测试设置从RC6更新到2.0.0。我确实遇到过打字和包裹的问题。我做了以下修复:
package.json
以获取Angular2软件包版本node_modules
和typings
目录npm install
和typings install
答案 2 :(得分:0)
对于单身服务,您应该将服务注入主 AdminAppMoudle 。 这种方式将在所有功能模块之间共享。如果您想为常见的服务,指令和管道设置单独的层,您应该继续使用 SharedModule Angular2中提供的功能。
import { TestService } from "./../module2/services/TestService";
@NgModule({
imports: [BrowserModule, Module2],
declarations: [AdminAppComponent],
bootstrap: [AdminAppComponent],
providers: [TestService ] //<------here. This will create a singleton service. Probably now its fine If you remove its reference for other feature module.
})
export class AdminAppModule {
}