我有一个开源项目,我正在升级到使用角1.2rc3。本质上,它处理表单按钮上的承诺。在这个plnkr http://plnkr.co/edit/vQd97YEpYO20YHSuHnN0?p=preview中,您应该能够单击右侧的"Save“,并看到控制台中出现了一个”单击“,因为它应该在指令中执行以下代码:
scope[functionName] = function () {
console.log('clicked');
//if it's already busy, don't accept a new click
if (scope.busy === true) {
return;
}
scope.busy = true;
var ret = scope.$eval(onClick);
if (angular.isDefined(ret) && ret.hasOwnProperty('then')) {
ret.then(function () {
scope.busy = false;
});
}
};使用1.2,此方法不再被执行,尽管正在执行以下代码:
if (angular.isDefined(attrs.ngClick)) {
console.log('test');
attrs.$set('ngClick', functionName + '()');
}我不知道为什么这个函数不能执行.有什么想法吗?
发布于 2013-10-29 04:25:21
发布于 2013-10-29 07:25:59
您确实不应该修改链接函数中的ng-click属性。我认为这是一个侥幸,它曾经对你有效,而修改优先级是一个黑客。我认为有一个更简单的方法来做你想要做的事情。看一看修改过的柱塞:
http://plnkr.co/edit/EypQbCc5wpw5xBWSiVuA?p=preview
我修改了您的指令,使之成为繁忙的单击,并完全取代ng单击。使用和操作ng单击是没有意义的(这是一个非常简单的指令)。如果你有任何问题,请告诉我。
顺便说一句,如果您确实需要添加或修改指令,您将通过编译函数来完成这一任务,而不是通过链接函数。
directive('busyClick', function () {
return {
restrict: 'A',
scope:{
busyClick: '&',
busyText: '@'
},
link: function (scope, el, attrs) {
el.on('click', function(){
scope.$apply(function(){
console.log('clicked');
//if it's already busy, don't accept a new click
if (scope.busy === true) {
return;
}
setBusy();
var ret = scope.busyClick();
if (angular.isDefined(ret) && ret.hasOwnProperty('then')) {
ret.then(function () {
setNotBusy();
});
}
});
});
var originalText = el.text();
function setBusy(){
scope.busy = true;
el.addClass('busy')
if(angular.isDefined(scope.busyText)){
el.text(scope.busyText);
}
}
function setNotBusy(){
scope.busy = false;
el.removeClass('busy')
el.text(originalText);
}
}
};
});https://stackoverflow.com/questions/19572954
复制相似问题