角度模块私人成员

时间:2013-06-05 21:30:59

标签: javascript angularjs angularjs-module

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

2 个答案:

答案 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"模块的直接依赖项,则这不起作用。

此示例应扩展到控制器。