2016-04-01 24 views
5

Tôi muốn đưa dịch vụ vào một dịch vụ khác. Tôi không có bất kỳ vấn đề gì khi tiêm các dịch vụ góc chuẩn (Http, v.v.), nhưng tôi có một ngoại lệ khi tôi đang cố gắng tiêm các dịch vụ của riêng mình.Tiêm dịch vụ tùy chỉnh trong một dịch vụ khác trong Angular 2

Ví dụ:

MyService:

import {Injectable, Inject} from 'angular2/core'; 
import {AnotherService} from '../../services/another.service'; 

@Injectable() 
export class MyService { 
    constructor(Inject(AnotherService) private anotherService: AnotherService) { 
    console.log(this.anotherService.get()); 
    } 
} 

AnotherService:

import {Injectable} from 'angular2/core'; 

@Injectable() 
export class AnotherService { 

    constructor() { } 
    get() { return 'hello'); } 

} 

Khi tôi cố gắng sử dụng MyService tôi nhận được EXCEPTION: No provider for AnotherService!

Tôi đã cố gắng sử dụng constructor(private anotherService: AnotherService), vẫn ném một ngoại lệ.

Cảm ơn!

Trả lời

5

Bạn nên đọc tài liệu về Góc 2. Vấn đề chính xác của bạn được giải thích trong tài liệu góc ở đây: https://angular.io/docs/ts/latest/guide/dependency-injection.html#when-the-service-needs-a-service

Bạn phải thêm dịch vụ của mình vào mảng nhà cung cấp. Lý do duy nhất bạn có thể sử dụng Http mà không làm điều này là bởi vì Ionic đặt nó vào mảng nhà cung cấp cho bạn. Nếu bạn đang sử dụng vanilla Angular 2, bạn vẫn sẽ phải thêm HTTP_PROVIDERS vào mảng nhà cung cấp.

Là một mặt lưu ý, bạn không cần điều đó Tiêm trong constructor của bạn, bạn chỉ có thể làm:

constructor(private anotherService: AnotherService) { 
    console.log(this.anotherService.get()); 
} 
+0

Cảm ơn bạn rất nhiều! Nó hoạt dộng bây giờ! Tôi vừa chỉ rõ 'AnotherService' trong các nhà cung cấp của thành phần. Tôi nên đọc tài liệu chăm chú hơn. – NoName

Các vấn đề liên quan