AngularJs列表控件 - 如何避免设置表单的脏标记

时间:2015-10-07 21:07:53

标签: javascript angularjs forms

我们有一个使用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指令,我还没有尝试申请该列表。我现在要试试。

1 个答案:

答案 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指令,但不知怎的,它在我第一次尝试时没有用,所以我已经切换到这个解决方案。