2014-12-10 2 views
3

У меня есть файл Services.js, который я пытаюсь загрузить все мои отдельные сервисы. Они отображаются как одиночные.Использование вложенных классов для имитации пространств имен в ES6

Services.js

var Services = { }; 

export default Services; 

Затем я хочу Sample Service вложен в Services, так что я мог бы вызвать к примеру Services.Sample.Operation()

`SampleService.js'

import Services from './Services'; 

Services.Sample = { 

    Operation: function() { 
     alert('operation!') 
    } 
}; 

export default Services.Sample; 

Тогда, я стараюсь и импорт :

import Services from './services/Services'; 
import SampleService from './services/SampleService'; 

alert(Services);   // yields '[object object]' 
alert(SampleService); // yields '[object object]' 
alert(Services.Sample); // yields 'undefined' <--- This is the one I actually want to use 

Как я могу получить его, чтобы я мог ссылаться на Services.Sample довольно tan SampleService. Как заставить SampleService входить в состав служб?

ответ

3

Ваш путь не работает, потому что вы импортируете Services.js в SampleService.js, но переменная Services не «оригинал» Services переменной от Services.js.

То, что я хотел бы сделать что-то вроде этого:

SampleService.js:

SampleService = { 

    Operation: function() { 
     alert('operation!') 
    } 
}; 

export default SampleService; 

Services.js:

import SampleService from './SampleService'; 

var Services = { }; 
Services.Sample = SampleService; 

export default Services; 

, а затем:

import Services from './services/Services'; 

alert(Services);   
alert(Services.Sample); 

export default Services; 

Это это также, кажется, больше смысла для меня в отношении основных (в) зависимостей и последовательность ваших модулей (определить, что Services может сделать в Services.js не SampleService.js, SampleService может быть независимым от Services, загрузка модуля Services.js не должна зависеть от SampleService.js, а также это может измениться позже ...).