【发布时间】:2015-06-10 04:39:43
【问题描述】:
在我的应用程序中,我通过 ajax 将数据发布到服务器,同时将数据发布到服务器,我希望能够向用户显示确实发生了某些事情,现在一个简单的方法是显示加载 gif。我真正想做的是改变被点击按钮的状态。我的 css 中有 4 个类:
- btn 就绪状态
- btn 工作状态
- btn 完成状态
- btn 失败状态
现在每个按钮都有一个 btn-ready-state 类,当您单击按钮时,该类将更改为 btn-working-state,其中按钮的文本会更改到“工作”,按钮内会出现一个小的加载图标。当操作成功完成后,它会切换到 btn-completed-state,如果失败则切换到 btn-failed-state。现在我已经能够在我的代码中使用 jquery 做到这一点,但是代码是如此混乱和不整洁,并且不能与 angular 一起正常工作。有人告诉我我可以使用指令来实现这一点,但由于我是 angular 新手,我对如何使用指令实现这一点感到困惑,我确实知道指令是什么以及如何制作指令,我的问题是执行这个特殊的功能。这就是我使用 jquery 的方式:
<script type="text/javascript">
$(document).ready(function() {
var $loading = $('#loading');
$loading.on("change", function(){ //bind() for older jquery version
var index = parseInt($('#loading').val());
var done = parseInt($('#done').val());
if (done === 0) {
$('.btn.ticket:eq(' + [index] + ')').removeClass('btn-ready-state');
$('.btn.ticket:eq(' + [index] + ')').addClass('btn-working-state');
$('.btn.ticket:eq(' + [index] + ')').find('.text').text('Working..');
$('.btn.ticket:eq(' + [index] + ')').find('.state').addClass('loading');
$('.btn.ticket:eq(' + [index] + ')').find('i').replaceWith('<img src="/images/loading.gif">' + '</img>');
} else {
$('.btn.ticket:eq(' + [index] + ')').removeClass('btn-ready-state');
$('.btn.ticket:eq(' + [index] + ')').removeClass('btn-working-state');
$('.btn.ticket:eq(' + [index] + ')').addClass('btn-completed-state');
$('.btn.ticket:eq(' + [index] + ')').find('.text').text('Added');
$('.btn.ticket:eq(' + [index] + ')').find('.state').addClass('done');
$('.btn.ticket:eq(' + [index] + ')').find('i').replaceWith('<i class="glyphicon glyphicon-ok state"></i>');
$('.btn.ticket:eq(' + [index] + ')').find('img').replaceWith('<i class="glyphicon glyphicon-ok state"></i>');
}
}).change(); //could be change() or trigger('change')
});
$(document).on("click", ".btn.ticket", function() {
var index = $(".btn.ticket").index(this);
$('#loading').val(index).change();
});
$(document).on("click", ".btn.next", function() {
$(this).removeClass('btn-ready-state');
$(this).addClass('btn-working-state');
$(this).find('.text').text('Working..');
$(this).find('.state').addClass('loading');
$(this).find('i').replaceWith('<img src="/images/loading.gif">' + '</img>');
});
</script>
这是按钮的示例 html:
<button class="btn-ready-state"><span class="img"></span><span class="text"></span></button>
【问题讨论】:
-
通常会使用
ng-class完成大部分操作 -
是的,但我也更改了按钮的文本和图像。编辑了我的帖子。
-
使用角度表达式非常简单。我建议你在学习 Angular 时根本不要使用 jQuery
-
请告诉我怎么做,一个例子真的很有帮助,因为我对 Angular 还是很陌生。
-
<a class="btn next" ng-class="{'btn-ready-state': isReady, 'btn-working-state': isWorking}"><img ng-src="{{imageUrl}}" /></span><span class="text">{{text}}</span>没有规定不能在同一个元素及其内部使用多个指令。
标签: javascript jquery css angularjs html