Angular $httpProvider 拦截器在将 "UI Grid" 添加到应用程序后停止为 'ng-include' 工作
Angular $httpProvider interceptors stopped working for 'ng-include' after adding "UI Grid" to the app
我正在尝试添加 Angular UI Grid to my application, following introduction tutorial Tutorial: 101 Intro to UI-Grid 并遇到以下问题。
首先,网格有效,我可以在控制器中创建它并绑定到视图,但是
一旦我将它添加到项目中(只是作为一个模块添加,而不是在任何地方实际使用它),以前工作的拦截器就不再被触发,更具体地说,它需要用 ng-include[ 加载视图模板 (请参阅下面的一些代码摘录)。
编辑:请注意 ng-include 有效,它只是不通过拦截器,而是像 none.
一样有效
- Angular 1.4.8
- UI 网格 3.2.1
- jQuery 2.2.0
我尝试了什么:
- 使用其他 Angular 版本,
- 尝试使用工厂初始化拦截器,
- 更改了初始化数组中模块的顺序,
- 尝试了其他 jQuery 版本。
有没有人遇到过这样的问题,也许是其他模块?
HTML :
<body>
<div ng-app="app">
<div ng-controller="app.views.layout as vm">
<div ng-include="'/App/Main/views/layout/header.cshtml'"></div>
<div class="container">
<div class="angular-animation-container row">
<div ui-view class="shuffle-animation col-xs-12"></div>
</div>
</div>
</div>
</div>
</body>
Angular 应用程序初始化:
var app = angular.module('app', [
'ngAnimate',
'ngSanitize',
'ui.router',
'ui.bootstrap',
'ui.jq',
'ngTouch'
'ui.grid'
'abp',
]);
拦截器注册:
var abpModule = angular.module('abp', []);
abpModule.config([
'$httpProvider', function ($httpProvider) {
$httpProvider.interceptors.push(['$q', function ($q) {
return {
'request': function (config) {
if (endsWith(config.url, '.cshtml')) {
config.url = abp.appPath + 'AbpAppView/Load?viewUrl=' + config.url + '&_t=' + abp.pageLoadTime.getTime();
}
return config;
},
'response': function (response) {
if (!response.config || !response.config.abp || !response.data) {
return response;
}
var defer = $q.defer();
abp.ng.http.handleResponse(response, defer);
return defer.promise;
},
'responseError': function (ngError) {
var error = {
message: ngError.data || abp.ng.http.defaultError.message,
details: ngError.statusText || abp.ng.http.defaultError.details,
responseError: true
}
abp.ng.http.showError(error);
abp.ng.http.logError(error);
return $q.reject(ngError);
}
};
}]);
}
]);
我从头开始设置,现在可以使用了。看起来我在某处遗漏了一些小的配置错字。同样显然 ui-grid 不会干扰 angular http 拦截,所以结论是它是误报。
我正在尝试添加 Angular UI Grid to my application, following introduction tutorial Tutorial: 101 Intro to UI-Grid 并遇到以下问题。
首先,网格有效,我可以在控制器中创建它并绑定到视图,但是 一旦我将它添加到项目中(只是作为一个模块添加,而不是在任何地方实际使用它),以前工作的拦截器就不再被触发,更具体地说,它需要用 ng-include[ 加载视图模板 (请参阅下面的一些代码摘录)。
编辑:请注意 ng-include 有效,它只是不通过拦截器,而是像 none.
一样有效- Angular 1.4.8
- UI 网格 3.2.1
- jQuery 2.2.0
我尝试了什么:
- 使用其他 Angular 版本,
- 尝试使用工厂初始化拦截器,
- 更改了初始化数组中模块的顺序,
- 尝试了其他 jQuery 版本。
有没有人遇到过这样的问题,也许是其他模块?
HTML :
<body>
<div ng-app="app">
<div ng-controller="app.views.layout as vm">
<div ng-include="'/App/Main/views/layout/header.cshtml'"></div>
<div class="container">
<div class="angular-animation-container row">
<div ui-view class="shuffle-animation col-xs-12"></div>
</div>
</div>
</div>
</div>
</body>
Angular 应用程序初始化:
var app = angular.module('app', [
'ngAnimate',
'ngSanitize',
'ui.router',
'ui.bootstrap',
'ui.jq',
'ngTouch'
'ui.grid'
'abp',
]);
拦截器注册:
var abpModule = angular.module('abp', []);
abpModule.config([
'$httpProvider', function ($httpProvider) {
$httpProvider.interceptors.push(['$q', function ($q) {
return {
'request': function (config) {
if (endsWith(config.url, '.cshtml')) {
config.url = abp.appPath + 'AbpAppView/Load?viewUrl=' + config.url + '&_t=' + abp.pageLoadTime.getTime();
}
return config;
},
'response': function (response) {
if (!response.config || !response.config.abp || !response.data) {
return response;
}
var defer = $q.defer();
abp.ng.http.handleResponse(response, defer);
return defer.promise;
},
'responseError': function (ngError) {
var error = {
message: ngError.data || abp.ng.http.defaultError.message,
details: ngError.statusText || abp.ng.http.defaultError.details,
responseError: true
}
abp.ng.http.showError(error);
abp.ng.http.logError(error);
return $q.reject(ngError);
}
};
}]);
}
]);
我从头开始设置,现在可以使用了。看起来我在某处遗漏了一些小的配置错字。同样显然 ui-grid 不会干扰 angular http 拦截,所以结论是它是误报。