控制器Angularjs,服务或父控制器之间的通信

时间:2014-02-05 21:14:13

标签: javascript angularjs controller communication

我想知道哪种是最佳做法,或者在某种情况下,哪种方式优先于另一种方式。

如果我们使用父(主)控制器,则设置如下:

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

所以我认为我们正在做的是将服务注入控制器。

我已经看过两种解决方案,但我不知道哪种解决方案更适合。

2 个答案:

答案 0 :(得分:2)

首选使用服务。通过使用父控制器进行通信会打破封装,更不用说如果你找到一个不了解原语和范围继承的限制的人就会有很多错误.Angular的依赖注入非常有效,你的代码将更加灵活。如果你这样做就可以长久。

服务的另一个优点是代码可读性。如果Controller 1引用了Controller Main中的内容,那么阅读代码的人可能不知道它来自何处。通过服务,您可以看到它被注入,您立即知道在哪里寻找它。

答案 1 :(得分: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

它很长