如何在AngularJs中的两个不同模块的控制器之间进行通信

前端之家收集整理的这篇文章主要介绍了如何在AngularJs中的两个不同模块的控制器之间进行通信前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我想知道我们可以在AngularJS中的两个不同控制器之间进行通信.假设我有两个模块,
Plunker: http://plnkr.co/edit/if0MQwlx9WHrD8XnMi2t?p=preview
  1. 1. var app = angular.module('fistModule',[]);
  2. app.controller('first',function ($scope) {
  3. $scope.firstMethod= function () {
  4. //my code}
  5. } )
  6. 2. var newapp = angular.module('secondModule,[]');
  7. newapp.controller('second',function ($scope) {
  8. $scope.secondMethod= function () {
  9. //my code}

有没有办法在两个不同模块的控制器之间进行通信.

我的代码
JS:

  1. angular.module('myApp',[])
  2. .controller('ParentCtrl',['$scope',function($scope) {
  3.  
  4. $scope.message = "Child updated from parent controller";
  5.  
  6. $scope.clickFunction = function() {
  7. $scope.$broadcast('update_parent_controller',$scope.message);
  8. };
  9. }
  10. ]);
  11. angular.module('myNewApp',[])
  12. .controller('ChildCtrl',function($scope) {
  13. $scope.message = "Some text in child controller";
  14.  
  15. $scope.$on("update_parent_controller",function(event,message) {
  16. $scope.message = message;
  17. });
  18. }
  19. ])

HTML:

  1. <div ng-app="myApp" ng-controller="ParentCtrl">
  2.  
  3. <div ng-app="myNewApp" ng-controller="ChildCtrl">
  4. <p>{{message}}</p>
  5. </div>
  6.  
  7. <button ng-click="clickFunction()">Click</button>
  8. </div>
正如@JB Nizet所说,你这样做的方式完全相同.您使用服务在两个控制器之间进行通信.

一个模块需要将另一个模块作为依赖项.这始终是单向依赖.我已经使secondModule成为firstModule的依赖项.

同样,服务中的值存储在一个名为data的对象中.这是因为JavaScript不通过引用传递值 – 而是通过引用传递对象.所以这是一种拳击形式.

  1. angular.module('firstModule',['secondModule'])
  2. .controller('FirstController',FirstController)
  3. .service('sharedData',SharedData);
  4.  
  5. FirstController.$inject = ['sharedData'];
  6. function FirstController(sharedData) {
  7. this.data = sharedData.data;
  8. }
  9.  
  10. function SharedData() {
  11.  
  12. this.data = {
  13. value: 'default value'
  14. }
  15.  
  16. }
  17.  
  18. angular.module('secondModule',[])
  19. .controller('SecondController',SecondController);
  20.  
  21. SecondController.$inject = ['sharedData'];
  22. function SecondController(sharedData) {
  23. this.data = sharedData.data;
  24. }
  1. <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
  2. <div ng-app="firstModule">
  3.  
  4. <div ng-controller="FirstController as vm">
  5. First Controller in module firstModule<br>
  6. <input type=text ng-model="vm.data.value" />
  7. </div>
  8.  
  9. <div ng-controller="SecondController as vm">
  10. Second Controller in module secondModule<br>
  11. {{vm.data.value}}
  12. </div>
  13. </div>

猜你在找的Angularjs相关文章