Javascript angularJS拦截器:访问父控制器方法
在我的应用程序中,我对http请求进行了不同的操作,例如:Javascript angularJS拦截器:访问父控制器方法,javascript,angularjs,Javascript,Angularjs,在我的应用程序中,我对http请求进行了不同的操作,例如: $scope.getArticle = function(id) { $http.get('/app/' + id, { headers: { 'Content-Type': 'application/json', } }) .success(function(response) {
$scope.getArticle = function(id) {
$http.get('/app/' + id, {
headers: {
'Content-Type': 'application/json',
}
})
.success(function(response) {
})
.error(function(data, status, headers, config) {
});
};
$scope.displayAlert = function (message) {
var modalHtml = '<div class="modal-header"><h3>Warning</h3></div>';
modalHtml += '<div class="modal-body"><strong>' + message + '</strong></div>';
modalHtml += '<div class="modal-footer"><button class="btn-md btn-green pull-right" ng-click="$dismiss()">OK</button></div>';
$scope.modalInstance = $modal.open({
template: modalHtml,
size: 'sm',
backdrop: 'static',
keyboard: false
});
$timeout(function () {
$scope.modalInstance.close('closing');
}, 5000);
};
但是当我有错误调用$scope.displayAlert()
方法时,我怎么能在这个拦截器中呢
我当然可以这样做:
$scope.getArticle = function(id) {
$http.get('/app/' + id, {
headers: {
'Content-Type': 'application/json',
}
})
.success(function(response) {
})
.error(function(data, status, headers, config) {
$scope.displayAlert('error');
});
};
但这是个坏主意。。。怎么做 您可以使用
$rootScope
以及$broadcast
和$on
作为事件总线在组件之间进行通信。请注意,这可能会影响性能,因此在使用这些方法时应小心
为您服务:
var responseError = function (rejection) {
var rootScope = rootScope || $injector.get('$rootScope');
....
$rootScope.$broadcast('responseError',{
message: 'Rejection Reason' });
在控制器中:
$scope.$on('responseError', function(event, data){
$scope.displayAlert(data.message); });
“但有些地方出了问题…”什么地方出了问题/不起作用?在发布之前-1写下什么地方出了问题?@Claies如何在此处使用它?您需要在此处分离关注点
displayAlert
看起来像一个通用错误模式,因此它不应该是特定于特定控制器的方法-它应该存在于自己的服务中(或在拦截器中)@user2943490否)每个控制器的某些样式不同,如果是通用的?那怎么编码呢?
$scope.$on('responseError', function(event, data){
$scope.displayAlert(data.message); });