簡體   English   中英

控制器Angularjs,服務或父控制器之間的通信

[英]Communication between controllers Angularjs, service or parent controller

我想知道哪種方法最好,或者哪種情況比另一種方法更可取。

如果使用父(主)控制器,則設置如下:

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

因此,我們可以在此處進行通信,因為控制器1和2都可以訪問Controller Main的范圍。

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

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

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

我已經看過兩種解決方案,但我不知道哪種是首選。

最好使用服務。 使用父控制器進行通信會破壞封裝,更何況如果您遇到不了解基元和范圍繼承等方面的知識的人,它可能會很麻煩。Angular的依賴注入效果很好,並且您的代碼將在其中更加靈活如果這樣做的話,從長遠來看。

服務的另一個優點是代碼可讀性。 如果Controller 1Controller Main引用了某些內容,則讀取代碼的人可能不知道其來源。 使用您看到的服務注入,您立即知道在哪里尋找它。

您可以像這樣使用:

'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

很長

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM