【发布时间】:2014-04-11 13:23:41
【问题描述】:
我编写了一个简单的示例,我想从服务发出/广播一个事件,我希望控制器监听该事件并更改 UI,但我无法使其工作并调试它的代码似乎停止在侦听器中,但它不执行该函数。
http://plnkr.co/edit/eglcq7zELLfKp86DYzOe?p=preview
服务:
angular.module('ServiceModule', []).
service('servicetest', ['$rootScope', function($rootScope){
this.test = function(){
$rootScope.$emit('testevent');
};
}]);
控制器
angular.module('ControllerModule', ['ServiceModule']).
controller('ControllerTest', ['$scope','$rootScope','servicetest', function($scope, $rootScope, servicetest){
$scope.name = 'World';
servicetest.test();
$rootScope.$on('testevent', function(){
$scope.name = 'Joe';
});
}]);
索引
<!DOCTYPE html>
<html ng-app="ControllerModule">
<head>
<meta charset="utf-8" />
<title>AngularJS Plunker</title>
<script>document.write('<base href="' + document.location + '" />');</script>
<link rel="stylesheet" href="style.css" />
<script data-require="angular.js@1.2.x" src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.16/angular.min.js" data-semver="1.2.16"></script>
<script src="controller.js"></script>
<script src="service.js"></script>
</head>
<body ng-controller="ControllerTest">
<p>Hello {{name}}!</p>
</body>
</html>
解决方案:
正如 ivarni 或 Walter 品牌所报告的,对触发事件的服务函数的调用必须放在侦听器之后,否则您触发的事件还没有侦听器能够侦听。
我们只需要改变控制器如下:
服务
angular.module('ControllerModule', ['ServiceModule']).
controller('ControllerTest', ['$scope','$rootScope','servicetest', function($scope, $rootScope, servicetest){
$scope.name = 'World';
$rootScope.$on('testevent', function(){
$scope.name = 'Joe';
});
servicetest.test();
}]);
【问题讨论】:
标签: javascript angularjs angularjs-directive angularjs-scope