2017-03-23 166 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