2015-10-18 23 views
0

我正在使用打字稿實現一個簡單的角度應用程序。
我將一個服務引用傳遞給一個控制器,但是當我嘗試調用一個服務的方法時,我得到一個異常,說服務引用是未定義的。了 「dataAccessLayer」 模塊被正確地添加作爲依賴於 「clinicManager」 模塊(這是該控制器所屬的那一個)

我的服務:在打字稿中寫入的角度服務在控制器中是未定義的

module app.dal{ 

interface IDataAccessService{ 
    get(id:number):app.Model.IPatient; 
} 

export class DataAccessService implements IDataAccessService{ 
    private _db : Loki; 

    static $inject = ['Loki']; 
    constructor(private Loki:Loki) { 
     this._db = new Loki('./database/db.json',{ 
      autosave: true, 
      autosaveInterval : 3000 // 3 secs 
     }); 
    } 

    get(id:number):app.Model.IPatient { 

      // Implementation here... 
     } 
    } 

angular.module('dataAccessLayer',['lokijs']) 
    .service('dataAccessService',['Loki',DataAccessService]); 
} 

控制器:

module app.PatientDetails{ 

interface IPatientDetails{ 
    patient: app.Model.IPatient; 
} 

import accessLayer = app.dal.DataAccessService; 

export class PatientDetailsCtrl implements IPatientDetails{ 

    private dataAccessService: accessLayer; 

    static $inject = ['patient','dataAccessService']; 
    constructor(public patient:app.Model.IPatient, dataAccessService:accessLayer){ 
     this.dataAccessService = dataAccessService; 

     // -> TypeError: Cannot read property 'get' of undefined 
     var patient = dataAccessService.get(1); 

    } 
} 

    angular.module('clinicManager') 
     .controller('patientDetailsCtrl',['dataAccessService',PatientDetailsCtrl]); 
} 

app.js

angular.module('clinicManager',['ngMaterial','dataAccessLayer']); 

的index.html

<!-- Application scripts--> 
<script src="app.js"></script> 

<!-- Services--> 
<script src="DataAccessLayer/DataAccessService.js"></script> 

<!-- Controllers--> 
<script src="Controllers/PatientDetailsCtrl.js"></script> 
+0

腳本的順序是否正確? –

+0

我用腳本順序更新了請求。在我眼中,順序是正確的。 – Francesco

回答

0

如果我刪除了參考控制器病人服務得到正確實例化,服務工作正常。我把代碼放在這裏以更好地顯示格式:

module app.PatientDetails{ 

interface IPatientDetails{ 
    // patient: app.Model.IPatient; 
} 

import accessLayer = app.dal.DataAccessService; 

export class PatientDetailsCtrl implements IPatientDetails{ 

    private dataAccessService: accessLayer; 

    static $inject = [/*'patient',*/'dataAccessService']; 
    constructor(/*public patient:app.Model.IPatient,*/ dataAccessService:accessLayer){ 
     this.dataAccessService = dataAccessService; 

    // The function is now called properly 
    var patient = dataAccessService.get(1); 

    } 
} 

    angular.module('clinicManager') 
     .controller('patientDetailsCtrl', ['dataAccessService',PatientDetailsCtrl]); 
} 
相關問題