【问题标题】:angular2 service method not getting invokedangular2服务方法没有被调用
【发布时间】:2016-10-13 01:41:25
【问题描述】:

我尝试创建一个示例 angular2 服务并使用它,但我不确定我所犯的错误。服务方法无法被组件调用,详情请看plunkerhttps://plnkr.co/edit/tlnGU9Er6GxsOaUMCZZG?p=preview

我的服务代码如下所示

import { Injectable } from 'angular2/core';
import { HTTP_PROVIDERS, Http, Headers, Response, JSONP_PROVIDERS, Jsonp } from 'angular2/http';
import { Configuration } from './Configuration';
import 'rxjs/add/operator/map'
import { Observable } from 'rxjs/Observable';

///Service class to call REST API
@Injectable()
export class SampleService {
    items: Array<any>;

    constructor() {
        this.items = [
            { name: 'Test1' },
            { name: 'Test2' },
            { name: 'Test3' }
        ];
    }

    getItems() {
        return this.items;
    }
}

【问题讨论】:

  • 使用新的 -> Angular -> 2.0 TS take.ms/AJTLh
  • 您的 index.html 页面不包含任何 anuglar2 代码,并且未设置为使用 System.js 将 typescript 转换为 javascript。考虑按照本教程完成缺失的部分:angular.io/docs/ts/latest/quickstart.html
  • 注意你的组件文件名是SampleCompoent.ts
  • 感谢您的帮助。我按照上面建议的步骤..创建了一个新的 angular2 应用程序,从 CDN 引用了所有必需的引用。仍然没有在组件中调用服务方法。我错过了什么?请参考新的plunker:plnkr.co/edit/KZ59wc5e4hpdZzq5UL4X

标签: angular angular2-services


【解决方案1】:

当您引导应用程序(在您的情况下为bootstrap(SampleComponent, [SampleService]))或组件的提供程序数组中时,您需要将@Injectable 服务包含在提供程序数组中。有关依赖注入的更多信息,您可以在此处阅读:https://angular.io/docs/ts/latest/guide/dependency-injection.html

将其添加为提供者后,无论何时将其注入到类构造函数中,组件都将能够解析它。阅读该链接后,将清楚依赖注入树的工作原理:)

此外,在 plunkr 中,您有两个组件具有相同的选择器('my-app'),我猜这也是一个错误。

【讨论】:

  • 我按照您的建议进行了所有更改,但仍无法按预期工作。您能否检查一下 plunker 并纠正我的错误?
  • plnkr.co/edit/hI7z0Hnx7ssgDdwd3n12?p=preview 给你..我分叉并更新它..你有 2 个问题。第一个是在 bootstrap.ts 中,您在使用依赖数组 import {SampleService} from './SampleService' 之前没有导入该服务。其次,您从错误的地方导入了引导函数本身(您没有使用 RC 版本,而是使用 beta 版),它在 import {bootstrap} from 'angular2/platform/browser'; 中而不是在 @angular/... 中。第三个 ngFor 中的 let 一词在 beta 中不存在,所以我用#item 更改了它
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-01-22
  • 1970-01-01
  • 2016-03-09
  • 2012-03-13
  • 1970-01-01
  • 2014-06-02
相关资源
最近更新 更多