在不同的控制器中为函数添加监听器 - Angular JS

时间:2014-04-08 22:36:28

标签: angularjs

我有一个使用两个控制器的页面。一个与标题相关联(在许多不同的页面上重复使用),另一个与页面主体相关联。加价看起来像:

<div id = 'header' ng-controller = 'headerController' >
    <div id = 'login-button' ng-click = 'login()'>
        Login
    </div>
</div>

<div id = 'body' ng-controller = 'myPageController'>
     ....
</div>

控制器分别在两个单独的JS文件中定义:

headerController.js
myPageController.js

我想将一个监听器绑定到login()函数,这样只要单击与其关联的按钮,就会在myPageController.js文件中调用另一个函数。

我将如何在Angular中执行此操作?

2 个答案:

答案 0 :(得分:5)

最好的方法是$broadcast() $rootScope来自您的页面控制器使用$scope.$on()处理的function headerController($scope, $rootScope) { $scope.login = function () { $rootScope.$broadcast('login'); }; } 事件。

示例:

headerController.js:

function myPageController($scope) {
    $scope.$on('login', function () {
        // handle login event here
    });
}

myPageController.js

{{1}}

答案 1 :(得分:0)

$ rootScope。$ broadcast()相当慢。如果您只想要两个不相关的控制器进行通信,最好通过服务完成。例如,请参阅我的回答:

Communicating between a Multiple Controllers and a directive

希望有所帮助!