我有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
返回一个承诺,这就是我一直一个链接然后到$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;
}
});
但这没有阻止回发无论是。这是一个带有共享主页面的webforms项目,所以我不能真正更新form
元素,而不会潜在影响很多其他页面。该表单确实有一个空的action
属性。此外,ng-controller
属性是一个元素内的form
元素,不知道是否有差别?
我在做什么错?如果这是微不足道的,我对Angular btw很陌生!
为什么你需要使用$超时? – Bharat
没有它,我想要不是空的元素的ng类绑定似乎不起作用。我在范围*上更改的属性被更改,但绑定不会添加该类。但是,它**会阻止回发 – danwellman
绑定不会更改,因为点击不在角度摘要周期内。而不是$ timeout将作用域更改用范围括起来$ apply()或者你可以用ng-click来代替element.bind。 – Bharat