2016-05-19 8 views
4

Я не понимаю Когда использовать @Inject и когда использовать @Injectable?В чем разница между @Inject и @Injectable в Angular 2 typescript

import {Component, Inject, provide} from '@angular/core'; 
    import {Hamburger} from '../services/hamburger'; 
    export class App { 
     bunType: string; 
     constructor(@Inject(Hamburger) h) { 
     this.bunType = h.bun.type; 
     } 
    } 

И ..

import {Injectable} from '@angular/core'; 
    import {Bun} from './bun'; 
    @Injectable() 
    export class Hamburger { 
     constructor(public bun: Bun) { 
     } 
    } 

ответ

4

@Injectable декоратор направлен на самом деле установить некоторые метаданные, которые зависимостей, чтобы ввести в конструктор соответствующего класса. Это декоратор класса, который не требует параметров. Без этого декоратора не зависимость не будет закачиваться ...

@Injectable() 
export class SomeService { 
    constructor(private http:Http) { 
    } 
} 

@Inject декоратора должен использоваться на уровне параметров конструктора, чтобы указать метаданные о элементах инъекционных. Без него используется тип параметров (obj:SomeType эквивалентен @Inject(SomeType) obj).

@Injectable() 
export class SomeService { 
    constructor(@Inject(Http) private http:Http, @Inject('sometoken') obj) { 
    } 
} 
+0

Спасибо @Thierry, но можете ли вы объяснить мне, почему мы используем @Injectable() Мы напрямую можем экспортировать класс, а затем почему мы используем @Injectable()? –

+1

Если вы свободны не использовать декоратор '@ Injectable' для экспортированного класса. Он будет работать, если вы не хотите что-то в нем вставить ... Без декоратора ничего не будет введено в соответствующий экземпляр экспортированного класса. –

+0

Если я экспортирую класс и импортирую его в некоторый модуль и использую его в конструкторе кода (пример: пример), как это, он будет работать отлично, я уже тестирую это. Тогда есть ли какая-либо причина использовать @Injectable() перед этим классом – Kiwi

 Смежные вопросы

  • Нет связанных вопросов^_^