2014-02-05 214 views
1

我想知道哪個是最佳實踐,或者可能在哪種情況下優先於其他方式。控制器之間的通信Angularjs,服務或父控制器

的設置是,如果我們使用父(主)控制器如下:

<div ng-controller="Controller Main"> 
    <div ng-controller="Controller 1"></div> 
    <div ng-controller="Controller 2"></div> 
</div> 

因此,我們可以在這裏,因爲這兩個控制器1和2的訪問控制主要的範圍進行通信。

另一種方式是,如果我們使用服務,

<div ng-controller="Controller 1"></div> 
<div ng-controller="Controller 2"></div> 

因此,我認爲我們正在做的是,我們注入的服務控制器。

我見過這兩種解決方案,但我不知道哪一個是首選。

回答

2

最好使用服務。通過使用父控制器進行通信會破壞封裝,更不用提它了,如果你遇到不知道原語和範圍繼承等限制的人,那麼它可能會非常麻煩.Atular的依賴注入非常好,而且你的代碼在如果你這樣做,長期運行。

服務的另一個優點是代碼可讀性。如果Controller 1引用Controller Main中的內容,則閱讀代碼的人可能不知道它來自何處。有了一個服務,你看到它注入,你立即知道在哪裏尋找它。

+0

是的,我開始想父控制器很容易,但後來它更模塊化,更容易閱讀如果你分開不同的控制器並在它們之間使用「橋」,則可以使用代碼。我也認爲以這種方式擴展和維護代碼更容易,也許更容易檢測錯誤。我的第一個解決方案實際上是父母控制者,因爲我對目前的範圍理念只有非常滿意,但隨後我搜索了一下,看到了引入服務來完成這項工作的新方法。 –

0

您可以使用諸如:

'use strict'; 
       (function(window, angular, undefined) { 
        'use strict'; 
        angular.module('ctrl.parent', []) 
         .controller('ParentController',function (scope) { 
          scope.vocalization = ''; 
          scope.vocalize = function() { 
           console.log(scope.vocalization); 
          }; 
        }); 
       })(window, angular); 
       angular.module('app',['ctrl.parent']) 
        .controller('ChildCtrl', function($scope,$controller){ 
        angular.extend($scope, new $controller('ParentController', {scope:$scope})); 
$scope.vocalization = 'CIP CIP'; 
       }); 

看看angularjs-share-config-directives-between-controllers

它稍長

+0

我還不熟悉擴展概念,但我會研究它。 –

+0

這是用於共享配置,而不是在控制器之間進行必要的通信。 –

相關問題