2015-05-14 25 views
8

Ben açısal 2 ile oynamak için basit marş uygulamasını oluşturma ve ben bir yapılacaklar hizmetini yapmak ve benim bileşene onu enjekte çalışıyorum ve ben bu hatayı alıyorum: TodoService içinEğik 2 Hayır sağlayıcı hatası

yok sağlayıcı ! (TodoList -> TodoService)

TodoService.ts

export class TodoService { 
todos: Array<Object> 
constructor() { 
    this.todos = []; 
} 
} 

app.ts

/// <reference path="typings/angular2/angular2.d.ts" /> 

import {Component, View, bootstrap, For, If} from 'angular2/angular2'; 
import {TodoService} from './TodoService' 

@Component({ 
    selector: 'my-app' 
}) 

@View({ 
    templateUrl: 'app.html', 
    directives: [For, If], 
    injectables: [TodoService] 
}) 

class TodoList { 
todos: Array<Object> 
    constructor(t: TodoService) { 
    this.todos = t.todos 
    } 

    addTodo(todo) { 
    this.todos.push({ 
     done:false, 
     todo: todo.value 
    }); 
    } 
} 

bootstrap(TodoList); 

sorunu nedir

? için

@Component({ 
    selector: 'my-app' 
}) 

@View({ 
    templateUrl: 'app.html', 
    directives: [For, If], 
    injectables: [TodoService] // moving this line 
}) 

Değişim it:

@Component({ 
    selector: 'my-app', 
    injectables: [TodoService] // to here 
}) 

@View({ 
    templateUrl: 'app.html', 
    directives: [For, If] 
}) 

Bu DI onu almak ve enjekte sağlayacak

cevap

5

enjektabl You have @View

üzerinde @Component değil belirtilir senin bileşenine. son Açısal versiyonda

+0

teşekkür ederiz. Ben de aynı şeyi yapıyorum. Ancak, uygulamam "enjektabl:" satırında çöküyor. TodoService yüklenmediğinden, daha sonra yüklenir. Eğer aynı dosyada onu iyi beyan edersem, ancak ayrı bir dosyada ise daha sonra gelir. Bundan nasıl kurtulabilirim? – Baconbeastnz

+0

Muhtemelen yapıcıda @ InjectPromise kullanabilirsiniz; angular2.src.di.annotations_impl adresine bakın. –

+5

daha yeni açısal http://stackoverflow.com/questions/30580083/angular2-no-provider-for-nameservice için bu cevabı kontrol edin – Peter

1

, örneğin, yerine enjekte edilebilir maddelerin sağlayıcıları kullanmak zorunda: Bunun

@Component({ 
    selector: 'my-app', 
    providers: [TodoService] 
})