在 AngularJS 中编写 DI 的最佳方式?
Best way to write DI in 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。
而且,我发现这看起来仍然很笨拙,有没有更好的方法来重构这样的代码?
像这样手动注入怎么样?
angular
.module('app')
.controller((uiGmapGoogleMapApi, $scope, $injector) ->
return $injector.invoke([useConfig.fake.TripListService,
(TripListService) ->
return
]))
当然return
-s可以隐含
没有内联数组依赖注入的代码如下所示
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。
而且,我发现这看起来仍然很笨拙,有没有更好的方法来重构这样的代码?
像这样手动注入怎么样?
angular
.module('app')
.controller((uiGmapGoogleMapApi, $scope, $injector) ->
return $injector.invoke([useConfig.fake.TripListService,
(TripListService) ->
return
]))
当然return
-s可以隐含