如何使用 $scope 收听 $rootscope.$broadcast
How to listen to $rootscope.$broadcast with $scope
我的 $scope.$on(...
好像收不到广播。
我有一个拦截器来捕获 http 响应错误并广播一个我的主控制器可以响应的事件。
(function () {
'use strict';
angular
.module('app')
.factory('httpErrorInterceptor', httpErrorInterceptor);
httpErrorInterceptor.$inject = ['$rootScope', '$q'];
function httpErrorInterceptor($rootScope, $q) {
return {
responseError: function (rejection) {
var firstDigit = rejection.status.toString().substr(0, 1);
if (firstDigit === "4") {
$rootScope.$broadcast('client_error', rejection);
}
else if (firstDigit === "5") {
$rootScope.$broadcast('server_error', rejection);
}
return $q.reject(rejection);
}
};
}
})();
在我的应用程序中,我故意将一些无效数据提交给 API 并返回一个 http 400。
我可以在 Chrome 开发者工具中看到 $rootScope.$broadcast('client_error', rejection);
受到攻击。
问题是这没有被击中:
(function () {
'use strict';
angular
.module('app')
.controller('main', main);
main.$inject = ['$scope', '$window', 'authenticationService', 'shoppingBasketService'];
function main($scope, $window, authenticationService, shoppingBasketService) {
// Scope functions.
$scope.$on('server_error'), function (event, error) {
console.log('handling server_error', error);
};
$scope.$on('client_error'), function (event, error) {
console.log('handling client_error', error);
};
....
....
范围已加载。为什么它对广播没有反应?
您的代码中可能还有其他错误没有显示,但您的代码监听事件不正确。应该是:
$scope.$on('server_error', function(event, error) {
console.log('handling server_error', error);
});
我的 $scope.$on(...
好像收不到广播。
我有一个拦截器来捕获 http 响应错误并广播一个我的主控制器可以响应的事件。
(function () {
'use strict';
angular
.module('app')
.factory('httpErrorInterceptor', httpErrorInterceptor);
httpErrorInterceptor.$inject = ['$rootScope', '$q'];
function httpErrorInterceptor($rootScope, $q) {
return {
responseError: function (rejection) {
var firstDigit = rejection.status.toString().substr(0, 1);
if (firstDigit === "4") {
$rootScope.$broadcast('client_error', rejection);
}
else if (firstDigit === "5") {
$rootScope.$broadcast('server_error', rejection);
}
return $q.reject(rejection);
}
};
}
})();
在我的应用程序中,我故意将一些无效数据提交给 API 并返回一个 http 400。
我可以在 Chrome 开发者工具中看到 $rootScope.$broadcast('client_error', rejection);
受到攻击。
问题是这没有被击中:
(function () {
'use strict';
angular
.module('app')
.controller('main', main);
main.$inject = ['$scope', '$window', 'authenticationService', 'shoppingBasketService'];
function main($scope, $window, authenticationService, shoppingBasketService) {
// Scope functions.
$scope.$on('server_error'), function (event, error) {
console.log('handling server_error', error);
};
$scope.$on('client_error'), function (event, error) {
console.log('handling client_error', error);
};
....
....
范围已加载。为什么它对广播没有反应?
您的代码中可能还有其他错误没有显示,但您的代码监听事件不正确。应该是:
$scope.$on('server_error', function(event, error) {
console.log('handling server_error', error);
});