我正在尝试实现延迟授权,仅当用户触发对需要身份验证的 API 的调用时才会引入登录对话框。我正在使用引导程序ui.bootstrap.modal(和模态中的ui.bootstrap.alert)。问题是这些指令明确指定了以下内容teamplateUrl
:
- 模板/modal/backdrop.html(在
modal.js
这里) - 模板/模态/window.html(在
modal.js
这里) - 模板/alert/alert.html(在
alert.js
这里)
像这样:
.directive('modalBackdrop', ['$timeout', function ($timeout) {
return {
restrict: 'EA',
replace: true,
templateUrl: 'template/modal/backdrop.html',
link: function (scope, element, attrs) {
/* ... */
}
};
}])
每次我调用$modal.open()
并且 ui-bootstrap 为新的模态窗口构建 DOM 时,Angular 都会尝试通过$http
服务解析这些 url,即使模板已经通过$templateCache.put
方法或添加<script>
标签加载。这基本上导致了我的拦截器中的无限递归,它试图为request
上面的 url 带来登录对话框的过载。
这是我的拦截器的简化版本:
.config(['$provide', '$httpProvider', function($provide, $httpProvider) {
$provide.factory('testInterceptor', ['$injector', function($injector) {
return {
'request': function(config) {
var auth = $injector.get('authService');
var modal = $injector.get('$modal');
if (!auth.LoggedIn) {
var loginModal = modal.open({
template: 'Login screen <alert type="warning">some message</alert>',
});
return loginModal.result;
}
return config;
}
}}]);
工作演示在这里
谁能建议不涉及对ui.bootstrap.modal
和中使用的 templateUrls 进行硬编码的方法ui.bootstrap.alert
?
我也在 github 上报告了这个问题。