2016-05-05 15 views
7

Angular 2 stil kılavuzunda (https://github.com/mgechev/angular2-style-guide/blob/master/old/README.md#directory-structure) belirtildiği gibi dışa aktarmak için bir index.ts dosyası kullanıyorum.
Bu, uygulama boyunca iyi çalıştı Im yazıyor, ama bir nedenle bir hizmette başka bir servise enjekte etmeye çalışıyorum bu garip bir Hataya neden olur.

Dışa aktarma sınıfına index.ts dosyası kullanmak, enjekte edilen kurucuda undefined neden olur

ihraç sınıfı:

import {Injectable} from "angular2/core"; 
@Injectable() 
export class UserIds{ 
    private _signature_id:string; 
    private _role_id:number; 
    get signature_id():string{ 
     return this._signature_id; 
    } 
    set signature_id(id:string){ 
     this._signature_id = id; 
    } 
    get role_id():number{ 
     return this._role_id; 
    } 
    set role_id(id:number){ 
     this._role_id = id; 
    } 
} 

index.ts dosyası:

export {Midiate} from "./midiate.service/midiate.service"; 
export {HttpRest} from "./http_rest.service/http_rest.service"; 
export {UserIds} from "./user_ids.service/user_ids.service" 

Hata (ithal dosyası) neden kodu:

import {UserIds} from "../index"; 
import {Http} from 'angular2/http'; 
@Injectable() 
export class HttpRest{ 
constructor(
    public _http: Http, 
    public userIdsx: UserIds 
){} 
... 
} 

Tarayıcı tarafından atılan hata:

EXCEPTION: Cannot resolve all parameters for 'HttpRest'(Http, undefined). Make sure that all the parameters are decorated with Inject or have valid type annotations and that 'HttpRest' is decorated with Injectable. 

UserIds sınıfının, kurucunun paramızlarında tanımsız olduğunu görebilirsiniz. Userids kaynak dosyasına içe değiştirme

sorunu düzeltildi:

import {UserIds} from "../user_ids.service/user_ids.service"; 

Hala benim app diğer tüm hizmet ve bileşenler gibi index.ts kullanarak bu daha eski tarz devam etmek istiyorum ve aynı zamanda Bunun neden olduğunu anladım.

+0

Bu konuda hala bir gelişme yok ve bunun neden olduğu konusunda hiçbir ipucu yok, diğer ihracatlarla birlikte oluyor. – wagwanJahMan

+0

Sadece @Injectable ile olduğu gibi görünüyor. Aynı konuya sahip olmak. – rook

cevap

2

Minko Gechev'nin stil kılavuzunda dosyaya ada göre atıfta bulunuyor. Ayrıca bu konuya koştum ve sadece cephe dosyamı bir klasöre taşıdım ve daha sonra bu dosyayı ada göre isimlendirdim. Ben de yol dosyası ile bir isim uyuşmazlığı önlemek için klasör olarak yeniden adlandırıldı çünkü yolu

hiçbir dosya uzantısı olmadığı için kafam karıştı çünkü ben klasörde bir index.ts dosyası oluşturma hakkında soran this question sahip olduğunuz aynı sorunu yaşıyorsanız.

| shared 
    | services 
     | login.service.ts 
     | blog.service.ts 

services.ts

export {LoginService} from './_services/login.service' 
export * from './_services/blog.service' 

içerdiğinde

| shared 
    | _services 
     | login.service.ts 
     | blog.service.ts 
    | services.ts 

için ben sonra aşağıdaki ithalat

import {LoginService, BlogService} from './shared/services' 
ile benim hizmet başvurmak Gönderen
+0

Ayrıca services.ts hizmetlerine/index.ts içine taşıyabilir ve aynı şekilde çalışması gerekir. – Sierrodc

+0

Evet bu işe yarayacak –

1

Dışa aktarmalarınızı dizine eklediğiniz sipariş gibi görünüyor. Bir hata olup olmadığından emin değilsiniz, ancak yine de ...

Meta verilerle süslenmiş sınıflar, dizinin en üstünde olmalıdır. Bunlardan biri diğerini enjekte ederse, "başka" ifadesi "bir" in üstünde olmalıdır.

+0

Neden bu soru doğru olanı işaretlemiyor merak ediyorum, neşelendiren adam;) –

İlgili konular