[英]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 1
在Controller 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.