我有一个带有提交按钮的表单,该表单需要 10 秒才能返回,我不希望用户同时单击该表单。到目前为止,我的方法是将按钮的文本设置为buttonText="Loading..."
并使用ng-disable
我在提交(isSubmitted
)时设置的标志。考虑到这必须是一个通用模式,那么最好和最可重用的方法是什么?
问问题
152 次
2 回答
2
使用自定义指令创建可重用组件。该指令应创建一个隔离作用域并使用“&”语法来指定单击按钮时要调用的父作用域函数。传递一个回调函数,以便指令可以在任务完成时撤消按钮标签更改和禁用属性。
HTML:
<button wait-button do-stuff="doStuff(cbFn)">button label</button>
指示:
myApp.directive('waitButton', function() {
return {
scope: {
doStuff: '&'
},
link: function(scope, element) {
var normalText = element.text();
var callbackFn = function() {
console.log('callback')
// element[0] is the (unwrapped) DOM element
element[0].disabled = false;
element.text(normalText);
}
element.bind('click', function() {
element[0].disabled = true;
element.text('Loading...');
// Weird syntax below! Arguments must
// be passed inside an object:
scope.doStuff({cbFn: callbackFn});
})
}
}
})
function MyCtrl($scope, $timeout) {
$scope.doStuff = function(callbackFn) {
console.log('doStuff');
// Do stuff here... then call the callback.
// We'll simulate doing something with a timeout.
$timeout(function() {
callbackFn()
}, 2000)
}
}
于 2013-01-24T04:43:41.923 回答
0
我推荐使用 jQuery .delegate函数:记住“#” = 控件 ID 和“.” = CSS类
$("#create").click(function(){
$('body').append($('<div id="test" class="btn">click me<div>'));
});
//-- if you create single button use this
$("body").delegate("#test", "click", function() {
alert("worked!");
});
//-- if you create many buttons use this
// $("body").delegate(".btn", "click", function() {
// alert("worked!");
// });
于 2013-01-24T03:28:55.393 回答