2015-01-20 2 views
0

Коды без инъекций инлайн зависимости массив выглядит следующим образомЛучший способ написать DI в AngularJS?

angular 
.module('app') 
.controller('TripListController', 
    (TripListService, $scope, uiGmapGoogleMapApi) -> 
    return 
) 
.controller('UserListController', 
    (UserListService, $scope, uiGmapGoogleMapApi) -> 
    return 
) 

Что мне нужно вводить разные TripListService (TripListServiceFake, TripListServiceDev или TripListServiceDist), но сохранить другие услуги, такие как $scope и uiGmapGoogleMapApi без изменений.

Я пытался переписать так:

useConfig = { 
fake: 
    TripListService: 'TripListServiceFake' 
    UserListService: 'UserListServiceFake' 
dist: 
    TripListService: 'TripListServiceDist' 
    UserListService: 'UserListServiceDist' 

} 
angular 
.module('app') 
.controller('TripListController',[useConfig.fake.TripListService, 
    (TripListService, $scope, uiGmapGoogleMapApi) -> 
    return 
]) 
.controller('UserListController',[useConfig.fake.UserListService, 
    (UserListService, $scope, uiGmapGoogleMapApi) -> 
    return 
]) 

Но я считаю, это не работает, потому что angularJS не поддерживает частичную встроенный массив DI. Поэтому $scope и uiGmapGoogleMapApi также нуждаются в DI, хотя я не хочу писать встроенный массив DI для каждой постоянной службы неуклюже.

Кроме того, я обнаружил, что это все еще выглядит неуклюжим, есть ли лучший способ для таких рефакторинговых кодов?

+1

Существует 4 способа записи DI, 1) Неявная аннотация (без явного DI, но не минимизация безопасности), 2) Явная аннотация с записью массива, 3) Явная аннотация с помощью $ injection 4) То же, что и # 1, но с использованием ng -номенять библиотеку, чтобы позаботиться о проблеме минимизации. Не знаете, что вы пытаетесь сделать? Вы можете посмотреть шаблоны [угловой DI] (https://docs.angularjs.org/guide/di). – PSL

+0

взгляните на то, как это предлагает 'john papa'. просто google для john papa, руководство стиля angularjs – harishr

ответ

0

Как насчет того, чтобы вводить вручную что-то вроде этого?

angular 
.module('app') 
.controller((uiGmapGoogleMapApi, $scope, $injector) -> 
    return $injector.invoke([useConfig.fake.TripListService, 
     (TripListService) -> 
     return 
    ])) 

Конечно return -s может быть неявным.

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