我正在尝试创建一个控制器来获取错误消息并处理它们:
ngLogin.controller('ErrorCtrl', ['$scope', '$rootScope', function($scope, $rootScope) {
$scope.$on('ngError', function(event, args) {
$scope.displayErrors(args);
});
$scope.displayErrors = function(errors) {
alert(errors);
}
}]);
其他控制器的意思是广播错误:
ngLogin.controller('LoginCtrl', ['$scope', 'LoginService', '$controller', '$rootScope', function($scope, LoginService, $controller, $rootScope) {
$scope.login = function(callback) {
LoginService.login($scope.user.username, $scope.user.password, function(token) {
//SUCCESS
}, function(errors) {
$rootScope.$broadcast('ngError', errors);
});
};
}]);
我的问题是,如果没有为每个广播控制器添加以下代码,这将无效:
$scope.ErrorCtrl = $scope.$new();
$controller('ErrorCtrl', {
$scope: $scope.ErrorCtrl
});
的index.html
<script src="app.js"></script>
<script src="../src/LoginService.js"></script>
<script src="../src/LoginCtrl.js"></script>
<script src="../src/ErrorCtrl.js"></script>
没有其他办法吗?我宁愿不必在需要此错误处理的EVERY控制器中使用最后一段代码。当我删除它时,ErrorCtrl永远不会收到该事件。
答案 0 :(得分:2)
我会说创建服务将负责显示错误消息&amp;在应用程序运行阶段有一个事件监听器代码。
app.run(function($rootScope, errorService){
//listner here
$rootScope.$on('ngError', function(event, args) {
$scope.displayErrors(args);
});
});
app.service('errorService', function(){
var errorService = this;
errorService.displayErrors = function(errors){
alert(errors)
};
})
或者更方便的方法是调用服务displayErrors
方法,以便随时显示错误消息,从而可以从应用程序中消除基于事件的方法。
ngLogin.controller('LoginCtrl', ['$scope', 'LoginService', '$controller', '$rootScope', 'errorService', function($scope, LoginService, $controller, $rootScope, errorService) {
$scope.login = function(callback) {
LoginService.login($scope.user.username, $scope.user.password, function(token) {
//SUCCESS
}, errorService.displayErrors); //call display error method here.
};
}]);