2016-09-17 109 views
2

我最近已經遷移到Angular 2 RC6,現在到2.0.0。Angular 2:沒有供應商(2.0.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) { 


    } 
} 

導入模塊(單詞數)碼:

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加載兩次。

那麼,這是怎麼回事?

謝謝

回答

6

我認爲經過幾天的努力,我找到了答案!

這是關於進口的大寫字母。

所以,當我寫打字稿:

import {AdminHomeComponent} from "./components/admin-home.component"; 
import {AdminHomeComponent} from "./Components/admin-home.component"; 

角2將這種情況視爲兩個獨立的文件,並觸發二送查詢加載文件!

之後的後果非常奇怪,例如組件未被識別爲模塊的組成部分,以及着名的消息指出沒有給定服務的提供者。

謝謝大家!

+0

大聲笑,你需要更好的IDE /編輯器來自動檢查那些:D –

+0

我使用VS 2015和VS代碼,並且這兩種工具都沒有任何建議 – mostefaiamine

+0

你使用的是webpack和osx嗎?這將是一個問題。 –

0

我測試了你的代碼,它正在工作。

我也剛剛更新我的測試設置從RC6到2.0.0。我確實遇到類型和軟件包的問題。我下面來解決:

  • 檢查package.json爲Angular2包版本
  • 刪除node_modulestypings目錄
  • 運行npm installtypings install
+0

它有一個非常隨機的行爲。它首先運行正常,然後當我添加其他服務時,它不再識別提供的服務。我認爲它處理文件夾結構。 – mostefaiamine

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 { 
} 
+0

不工作,仍然加載testservice兩次! – mostefaiamine