7

在 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>
4

2 回答 2

6

,不可能在当前版本的 AngularJS 中创建“私有”服务。有一些关于支持私有(模块范围)服务的讨论,但没有实现。

到今天为止,在给定模块上公开的所有服务对所有其他模块都是可见的。

于 2013-06-06T05:50:51.003 回答
2

对于真正的私有装饰器行为,@pkozlowski.opensource 的正确答案是No。但是,您可以在某种程度上模拟这种行为。

接近所需行为的一种方法是创建一个应用程序的所有其他部分都不知道的模块,该模块包含所有旨在保持私有的服务/控制器/指令。然后,您将向其他开发人员公开的模块可以使用“私有”模块作为依赖项。

例子:

MyModule.js

angular.module("my.module.private_members", [])
.provider("PrivateService", function() { ... });

angular.module("my.module", ["my.module.private_members"])
.provider("PublicService", function($PrivateServiceProvider) { ... });

主.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"

这个例子应该扩展到控制器。

于 2016-05-10T07:40:28.520 回答