Angular 2没有提供者错误

Posted

技术标签:

【中文标题】Angular 2没有提供者错误【英文标题】:Angular 2 No provider error 【发布时间】:2015-07-26 02:41:39 【问题描述】:

我正在创建简单的入门应用程序来使用 angular 2,我正在尝试创建一个 todo 服务并将他注入我的组件,我收到了这个错误:

没有 TodoService 的提供者! (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);

有什么问题?

【问题讨论】:

【参考方案1】:

在最新的 Angular 版本中,你必须使用提供者而不是可注入对象,例如:

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

【讨论】:

【参考方案2】:

注射剂是在@Component 而不是@View 上指定的

你有:

@Component(
  selector: 'my-app'
)

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

改成:

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

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

这将允许 DI 拾取它并将其注入到您的组件中。

【讨论】:

谢谢。我正在做同样的事情。但是,我的应用程序在“injectables:”行崩溃了。因为 TodoService 没有加载,它稍后加载。如果我在同一个文件中声明它很好,但如果它在一个单独的文件中它会稍后出现。我怎样才能避免这种情况? 你可以在构造函数中使用@InjectPromise;见 angular2.src.di.annotations_impl 检查这个答案以获得更新的角度***.com/questions/30580083/…

以上是关于Angular 2没有提供者错误的主要内容,如果未能解决你的问题,请参考以下文章

Angular 2 Material MdSnackBar 没有提供者

错误:angular2 中没有 HttpHandler 的提供者

ERROR 错误:没有 JwtHelper 的提供者

Angular 4:错误:没有 AngularFireDatabase 的提供者

Angular2 错误 - 我的登录组件没有提供程序错误

Angular 4 错误:没有 HttpClient 的提供者