2017-03-23 119 views
0

我已经从一个API得到了一些数据,并返回其具有的价值Company[]一个关键的对象服务,它看起来像这样:角2:通过服务来

getCompanies(){ 
    return this.authHttp.get(this._companiesUrl) 
     .map(res => { 
      let response = res.json() || []; 
       response.items = response.items.map(thing => new Company(thing)); 
       return response; 
      }); 
} 

company.model.ts看起来是这样的:

export class Company{ 

id: number; 
.... 
constructor(obj:any){ 
    .... 
} 

// I'd like to be able to do this: 
changeName(newName: string){ 
    this.companyService.changeName(this.id, newName).sub.... 
} 

在我的公司模式,我想有一些方法将改变Company对象的属性和沟通这改变了与服务器。

我很难理解如何通过CompanyService注入Company类,尤其是因为新公司几乎只能在CompanyService本身创建。

请让我知道,如果我可以提供进一步的澄清或代码。

谢谢!

+0

您要在哪里更改公司名称?改变模型内的名称并将其推送到后端不应在模型中完成。 – Deutro

+0

@Deutro我想在模型内部和后端更改它......如果不应该在模型中完成,应该在导入服务的组件中完成它? – nick

+0

我想我没有正确制定它。可以在模型中更改模型的属性。但是对后端的调用不应该在模型内完成。 companyService.changeName()方法应该从组件内部调用。 – Deutro

回答

1

如果您在app.module中提供CompanyService,那么您将在整个应用程序中使用它的一个实例。

app.module.ts

import { CompanyService } from 'whereEverThisFileIs' 
... 
@NgModule({ 
    imports: [...], 
    declarations: [...], 
    providers: [..., CompanyService], 
    ... 
}) 

为了得到它里面Company你可以这样做:

import { CompanyService } from 'whereEverThisFileIs' 

export class Company{ 
    id: number; 
.... 
constructor(obj:any, private _companyService: CompanyService){ 
.... 
} 

changeName(newName: string){ 
    this._companyService.changeName(this.id, newName).sub.... 
} 

角从根部注入的CompanyService实例为您

你可以阅读关于此处:

https://angular.io/docs/ts/latest/guide/dependency-injection.html#!#angular-dependency-injection