我们有一个使用2个列表控件的移动器指令。问题是,当我只是点击指定项目列表中的项目时,它会使我的表单变脏。我在指令控制器onChanged事件中尝试了以下解决方案(由第二个列表ng-change调用):
$scope.onChanged = function (assigned) {
var currentState = $scope.form.$dirty;
$scope.selectedItem = assigned[0];
if (currentState === false)
$scope.form.$setPristine();
}
但是,currentState已经是真的,所以我的代码什么都不做。如何防止在列表控件中单击以设置窗体的脏状态?我发现了两个相关问题How can I exclude controls from making form Dirty?和How can I denote which input fields have changed in AngularJS,但我不清楚是否应该尝试其中任何一种解决方案。代码在几个地方检查$ scope.form。$ dirty,因此最好的解决方案是以某种方式确保单击列表不会使其变脏。我还有noDirty指令,我还没有尝试申请该列表。我现在要试试。
答案 0 :(得分:0)
我现在实施的解决方案是指令中的以下更改:
var directive = {
controller: ['$scope', '$timeout', function ($scope, $timeout) {
$scope.upDisabled = true;
$scope.downDisabled = true;
$scope.assigned = null;
$timeout(function () {
$scope.form.assignedList.$pristine = false;
});
基于该帖子Prevent input from setting form $dirty angularjs中的最后一个答案。在我的快速有限测试中它似乎工作。我最初试图在列表中使用我们的noDirtyCheck指令,但不知怎的,它在我第一次尝试时没有用,所以我已经切换到这个解决方案。