2016-12-13 6 views
0

Рассмотрим следующий компонентКак внедрить услугу во вспомогательный класс ES6

import DoSomethingSpecial from '....'; 

export default MyComponentController { 
    constructor() { 
     this.result = new DoSomethingSpecial().getData(); 
    } 
    ... 
} 

Итак, MyComponentController, конечно, контроллер для компонента и DoSomethingSpecial класс является классом ES215.

У меня проблема заключается в следующем: Внутри DoSomethingSpecial я хотел бы использовать некоторые угловые услуги, как $ HTTP и/или $ д и т.д. Как я могу вводить их в этот класс, например:

export default class DoSomethingSpecial { 
    constructor() { 

    } 

    getData() { 
      let $q = angular.injector().get('$q'); 
      .... 
    } 
} 

Это, однако, не работает. Есть ли другой способ, или я должен изменить этот класс на службу?

UPDATE: Возможный вариант использования: Предположим, вы загружаете в службе список объектов, которые вы конвертировать в экземпляры MyRecordItems следующим

import MyRecordItem from '...'; 

export default class MyRecordsService { 
    constructor($http) { 
     $http.get('url', { options}).then((response) => { 
      this.records = []; 

      response.data.forEach((item) => { 
       this.records.push(new MyRecordItem(item)); 
      }); 
     }); 
    } 
} 

Далее, где-то в ваше приложение этот список используется -> изменено -> и сохранено

let list = myRecordService.getList(); 
list[0].count = 10; 
list[0].save(); 

Как эта запись сохраняется? Это может быть следующим

export default class MyRecordItem { 
    constructor(data) { this.data = data; } 
    save() { 
     let url = ....; 
     return angular.$injector.get('$http').post(url, this.data) 
    } 
} 
+1

Теперь это странно. 'DoSomethingSpecial' не является Угловым сервисом, но использует угловые сервисы? – zeroflagL

+0

Хорошо, я потратил некоторое время, чтобы подумать о прецеденте, который я добавил в свой пост. –

+0

'save()' вызывается из Угловой службы или контроллера. Так почему бы не назвать 'save ($ http)' или 'save ($ http.post)'? – zeroflagL

ответ

2

Вводят зависимости, что ваш класс ES6 нуждается в конструктор контроллера ($q в данном случае). После того, как вы ввели $q в контроллер, создайте экземпляр класса и передайте $q в качестве параметра конструктору. Назначьте экземпляр this.

import DoSomethingSpecial from '....'; 

class MyComponentController { 

    constructor($q) { 
     'ngInject'; 

     this.doSomethingSpecialInstance = new DoSomethingSpecial($q); // instantiate the service, and pass the dependencies 
    } 

    getData() { 
      this.result = doSomethingSpecialInstance().getData(); // use the instance 
    } 
} 

export default MyComponentController; 

А определение класса:

export default class DoSomethingSpecial { 
    constructor($q) { 
    this.$q = $q; 
    } 

    getData() { 
    // do something with this.$q 
    } 
} 
+0

Насколько я знаю, это будет работать, только если класс используется как служба. Например, если я это делаю: 'let x = new DoSomethingSpecial();' как угловое знает, что оно должно что-то вводить, потому что оно здесь не участвует. –

+0

Мне потребовалось некоторое время, чтобы понять ваш смысл. См. Мой обновленный ответ. –

+0

Это звучит как единственное действующее решение :) Thnx –

Смежные вопросы