【问题标题】:AngularJs list control - how to avoid setting form's dirty flagAngularJs 列表控件 - 如何避免设置表单的脏标志
【发布时间】:2015-10-07 21:07:52
【问题描述】:

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

【问题讨论】:

    标签: javascript angularjs forms


    【解决方案1】:

    我现在实施的解决方案是指令中的以下更改:

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

    【讨论】:

      猜你喜欢
      • 2016-10-14
      • 1970-01-01
      • 2021-02-09
      • 2023-04-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-22
      相关资源
      最近更新 更多