2015-10-18 2 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]); 
} 

приложение.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]); 
} 
Смежные вопросы