Angular 2:没有(2.0.0.0)的提供者

时间:2016-09-17 21:37:01

标签: angular module

我最近迁移到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正在加载两次。

那么,发生了什么?

由于

3 个答案:

答案 0 :(得分:6)

我认为经过几天的挣扎,我找到了答案!

所有关于进口中的大写字母。

所以当我写下打字稿时:

--dbpath

angular 2将此视为两个单独的文件,并触发两个获取查询以加载文件!!!

之后的后果非常奇怪,例如组件未被识别为模块的一部分,而着名的消息传递表明没有给定服务的提供者。

全部谢谢!

答案 1 :(得分:0)

我测试了你的代码并且它正在运行。

我刚刚将我的测试设置从RC6更新到2.0.0。我确实遇到过打字和包裹的问题。我做了以下修复:

  • 检查package.json以获取Angular2软件包版本
  • 删除node_modulestypings目录
  • 运行npm installtypings 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 {
}