我正在使用 Angular 1.08,因此我需要使用responseInterceptors
.
首先是代码。
口译员:
app.factory('errorInterceptor', ['$q', 'NotificationService', function ($q, NotificationService) {
return function (promise) {
return promise.then(function (response) {
// do something on success
return response;
}, function (response) {
// do something on error
alert('whoops.. error');
NotificationService.setError("Error occured!");
return $q.reject(response);
});
}
}]);
app.config(function ($httpProvider) {
$httpProvider.responseInterceptors.push('errorInterceptor');
});
通知服务:
app.service("NotificationService", function () {
var error = '';
this.setError = function (value) {
error = value;
}
this.getError = function () {
return error;
}
this.hasError = function () {
return error.length > 0;
}
});
指令错误框:
app.directive("errorBox", function (NotificationService) {
return {
restrict: 'E',
replace: true,
template: '<div data-ng-show="hasError">{{ errorMessage }}</div>',
link: function (scope) {
scope.$watch(NotificationService.getError, function (newVal, oldVal) {
if (newVal != oldVal) {
scope.errorMessage = newVal;
scope.hasError = NotificationService.hasError();
}
});
}
}
});
问题:当我<error-box>
在多个地方使用时,所有这些框都会显示错误消息。这不是我的意图。我只想显示发生异常的错误框。
例如,我有一个显示交易列表的指令。当获取交易失败时,我想显示该部分中声明的错误框。我还有一个可以编辑客户的指令。该指令还包含错误框标记。
当保存客户失败时,会显示两个错误框,但是,我只希望显示客户的错误框。
有人有实现这个的想法吗?