我正在尝试实现一个重试ajax请求的系统,这些请求因临时原因而失败.在我的例子中,它是关于在调用刷新web服务以恢复会话之后重试因401会议状态代码而失败的请求,因为会话已过期.
问题是成功重试时不会调用"done"回调,这与调用的"success"ajax选项回调不同.我在下面编写了一个简单的例子:
$.ajaxSetup({statusCode: {
404: function() {
this.url = '/existent_url';
$.ajax(this);
}
}});
$.ajax({
url: '/inexistent_url',
success: function() { alert('success'); }
})
.done(function() {
alert('done');
});
Run Code Online (Sandbox Code Playgroud)
是否有办法在成功重试时调用完成式回调?我知道延期不能被"拒绝"后"解决",是否有可能阻止拒绝?或者可能将原始延迟的doneList复制到新的延迟?我没有想法:)
下面是一个更现实的例子,我试图排队所有401拒绝的请求,并在成功调用/ refresh后重试它们.
var refreshRequest = null,
waitingRequests = null;
var expiredTokenHandler = function(xhr, textStatus, errorThrown) {
//only the first rejected request will fire up the /refresh call
if(!refreshRequest) {
waitingRequests = $.Deferred();
refreshRequest = $.ajax({
url: '/refresh',
success: function(data) {
// session refreshed, good
refreshRequest = null;
waitingRequests.resolve();
},
error: function(data) {
// …Run Code Online (Sandbox Code Playgroud) 我正在寻找一个标准的angularjs指令列表及其优先级(尤其是非零指令).每当你想要创建一个特殊的指令时,看看它会很有帮助,例如,一个terminal: true用于查看它最适合的位置,以及更好地理解角度设计者如何使用它们的指令.
我知道每个指令都在其文档页面中指定了它的优先级,但这对于编译/链接顺序没有任何帮助,因为像下面的列表那样:
Directive - Prio ----------------- ng-repeat - 1000 ng-if - 600 ng-include - 400 ...
谢谢.
假设我们有以下设置:
#header {
background-color: #ddd;
padding: 2rem;
}
#containing-block {
background-color: #eef;
padding: 2rem;
height: 70px;
transform: translate(0, 0);
}
#button {
position: fixed;
top: 50px;
}Run Code Online (Sandbox Code Playgroud)
<div id="header">header</div>
<div id="containing-block">
containing-block
<div>
<div>
<div>
<button id="button" onclick="console.log('offsetParent', this.offsetParent)">click me</button>
</div>
</div>
</div>
</div>Run Code Online (Sandbox Code Playgroud)
按钮具有fixed位置并且包含块具有transform适当的属性。
这可能会让人感到意外,但按钮是相对于#containing-block而非视口定位的(正如人们在使用 时所期望的那样fixed)。那是因为该#containing-block元素具有transform属性集。有关说明,请参阅https://developer.mozilla.org/en-US/docs/Web/CSS/position#fixed。
有没有一种简单的方法可以找出按钮的包含块?top: 50px相对于哪个元素进行计算?假设您没有对包含块的引用,并且您不知道它有多少级。如果没有设置transform,perspective或filter属性的祖先,它甚至可能是 documentElement 。
对于absolute或relative定位元素,我们有elem.offsetParent它给我们这个参考。但是,对于 …
我正在尝试使用指令的transclude内容(指令的原始内容,而不是模板)作为网格中行的HTML模板.
<grid attrs="...">
<action-column-template>...(html I need)...</action-column-template>
</grid>
Run Code Online (Sandbox Code Playgroud)
我的想法是我需要action-column-template的原始HTML(未编译,未绑定到任何范围).
我不控制每一行的生成,因此我无法使用transclude(rowScope)手动将该操作模板绑定到每一行的范围.我只需要它作为普通的html(即"{{}}"和内部指令未被触及).
从链接函数运行transclude()fn可以获得已转换的内容,但绑定到范围并扩展了内部指令.并且编译函数的tElem参数的html()返回指令模板的HTML,而不是要转换的内容.
所以问题是:我可以将编译,控制器,preLink或postLink函数中的指令内容转换为未编译的HTML吗?
谢谢.