在AngularJS中,是否可以创建私有控制器或服务,这些控制器或服务可以在它们所定义的模块中使用,但不能被注入的另一个模块使用。
例如,可以将PrivateController设为私有的Child模块:
angular.module('Child', [])
.controller('PublicController', function ($scope){
$scope.children = ['Bob', 'Sue'];
})
.controller('PrivateController',function ($scope){
$scope.redHeadedStepChildren = ['Billy', 'Mildred'];
})
angular.module('Parent', ['Child'])
<div ng-app="Parent">
<div ng-controller='PublicController'>
<div ng-repeat='child in children'>
{{child}}
</div>
</div>
<div ng-controller='PrivateController'>
<div ng-repeat='child in redHeadedStepChildren'>
{{child}}
</div>
</div>
</div>
答案 0 :(得分:5)
否,无法在当前版本的AngularJS中创建“私人”服务。有一些关于支持私有(模块范围)服务的讨论,但没有实现。
截至今天,所有其他模块都可以看到给定模块上公开的所有服务。
答案 1 :(得分:1)
对于真正的私人装饰行为,@ pkozlowski.opensource具有否的正确答案。但是,您可以在某种程度上模拟此行为。
接近所需行为的一种方法是创建一个模块,该模块对于应用程序的所有其他部分是未知的,其中包含旨在保持私有的所有服务/控制器/指令。然后,您将向其他开发人员公开的模块可以使用&#34; private&#34;模块作为依赖。
示例:
MyModule.js
angular.module("my.module.private_members", [])
.provider("PrivateService", function() { ... });
angular.module("my.module", ["my.module.private_members"])
.provider("PublicService", function($PrivateServiceProvider) { ... });
Main.js
angular.module("app", ["my.module"])
// The following line will work.
.config(function($PublicServiceProvider) { ... });
// The following line causes an error
.config(function($PrivateServiceProvider) { ... });
当然,如果"app"
模块的开发人员知道然后将"my.module.private_members"
模块包含为"app"
模块的直接依赖项,则这不起作用。
此示例应扩展到控制器。