2013-06-05 116 views
6

在AngularJS中,是否可以創建專用控制器或服務,這些私人控制器或服務可以在它們定義的模塊中使用,但不能由注入的其他模塊使用。Angular模塊私人會員

例如,可以PrivateController爲私有的子單元:

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> 

回答

5

沒有,它是不可能在AngularJS的當前版本創建的「私人」的服務。有一些關於支持私有(模塊範圍)服務的討論,但沒有實現。

從今天開始,所有其他模塊都可以看到給定模塊上暴露的所有服務。

+0

這裏是一個小提琴來說明這一點:jsfiddle.net/6uux843h/1 – daniel1426

0

對於真實的私人裝飾行爲,@ pkozlowski.opensource有正確答案沒有。但是,你可以在一定程度上模擬這種行爲。

接近所需行爲的一種方法是創建一個模塊,該模塊對應用程序的所有其他部分都是未知的,其中包含所有服務/控制器/指令,這些部分都是保持私有的。然後,您將公開給其他開發人員的模塊可以使用「私有」模塊作爲依賴項。

實施例:

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"模塊的直接依賴關係。

這個例子應該擴展到控制器。