【问题标题】:How to communicate controller with each other in AngularJS?如何在AngularJS中相互通信控制器?
【发布时间】:2015-02-11 18:00:40
【问题描述】:

我正在编写一个控制器。该控制器必须与其他控制器通信。但是不知道有没有可能?

HTML:

<div data-ng-app="TestApp">
<div data-ng-controller="menuCtrl">
    <ul>
        <li> <a data-ng-click="Click()">
            Menü1</a>
        </li>
    </ul>
</div>
<div data-ng-controller="pageCtrl">
    <hr/> 
    <button data-ng-click="getText()">GetText</button>
    <br/>
    <strong data-ng-model="boldText"> {{boldText}}</strong>
</div>

JS:

var app = angular.module('TestApp', []);

app.controller('menuCtrl', function ($rootScope, $scope) {
    $scope.Click = function () {
    //???
    };
})
.controller('pageCtrl', function ($rootScope, $scope) {

    $scope.getText = function () {
        $scope.boldText = 'tst';
    };
});

我在 JSfiddle 上修复了示例:sample

【问题讨论】:

标签: javascript angularjs angularjs-scope rootscope


【解决方案1】:

您可以通过广播轻松实现:

var app = angular.module('TestApp', []);

app.controller('menuCtrl', function ($rootScope, $scope) {
    $scope.Click = function () {
        $scope.$broadcast('MyClickEvent', {
           someProp: 'Clicking data!' // send whatever you want
        });

    };
})

.controller('pageCtrl', function ($rootScope, $scope) {

   $scope.getText = function () {
       $scope.boldText = 'tst';
   };
   $scope.$on('MyClickEvent', function (event, data) {
        console.log(data); // 'Data to send'
   });
});

【讨论】:

    【解决方案2】:

    使用事件广播,我们可以将值从一个控制器传递到另一个控制器

    app.controller('menuCtrl', function ($rootScope, $scope) {
        $scope.Click = function () {
            var valueToPass = "value";
            $rootScope.$broadcast('eventMenuCtrl', valueToPass);
        };
    })
    .controller('pageCtrl', function ($rootScope, $scope) {
    
        $scope.getText = function () {
            $scope.boldText = 'tst';
        };
    
        $scope.$on('eventMenuCtrl', function(event, value) {
            $scope.boldText = value;
        })
    });
    

    http://jsfiddle.net/q2yn9jqv/4/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-03-24
      • 1970-01-01
      • 1970-01-01
      • 2019-09-08
      • 1970-01-01
      • 2015-09-15
      • 1970-01-01
      • 2012-03-22
      相关资源
      最近更新 更多