我在runat="server"
中有一个__doPostBack
锚点href
。
我希望在单击锚点时验证另一个字段已完成,并且只有在字段不为空时才允许回发。
我已经添加了一个自定义指令来处理这个问题,如下所示:
angular.module('app').directive('notEmpty', function ($timeout, $document) {
return {
restrict: 'A',
link: function (scope, element, attrs) {
element.bind('click', function (event) {
return $timeout(function () {
var elementToCheckNotEmpty = $document[0].querySelector(attrs.notEmpty);
if (!elementToCheckNotEmpty.value) {
scope.addInvalidClass = true; // input has an ng-class binding to $scope.addInvalidClass
event.preventDefault();
event.stopPropagation();
return false;
}
});
});
}
}
});
这不会阻止回发。更新scope
属性并将类添加到输入中是有效的,因为我看到在回发发生时应用了几秒钟的无效类。
我理解$timeout
会返回一个承诺,所以我尝试将{a> $timeout
链接到return $timeout(function () {
var elementToCheckNotEmpty = $document[0].querySelector(attrs.omwNotEmpty);
if (!elementToCheckNotEmpty.value) {
scope.addInvalidClass = true;
}
}).then(function () {
if (scope.addInvalidClass) {
event.preventDefault();
event.stopPropagation();
return false;
}
});
,如此:
form
但这并不妨碍回发。它是一个带有共享母版页的webforms项目,因此我无法真正更新action
元素而不会影响很多其他页面。该表单具有空ng-controller
属性。此外,form
属性位于内部 If statement
元素的元素上,不确定这是否会产生影响......
我做错了什么?我对Angular btw很新,所以如果这是微不足道的话,请道歉!
答案 0 :(得分:1)
使用$ timeout将函数添加到异步队列,从而不会阻止回发。并且当不使用$ timeout服务时绑定不会改变,因为click不在角度摘要周期内。而不是$ timeout将范围更改与范围括起来。$ apply()或者您可以使用ng-click而不是element.bind。