代码之家  ›  专栏  ›  技术社区  ›  user3804873

角度ng模型不更新脏值

  •  1
  • user3804873  · 技术社区  · 8 年前

    我想知道是否有可能“阻止”由于用户交互而变脏的表单字段(输入、选择……)的更新。 如果我更新ng模型原语(即:将pippo从1设置为X),则输入 即使我手动编辑控件,也会得到更新。

    有可能阻止吗?

    demo page:
    
    http://plnkr.co/edit/ClXoS7YVcEDtcApsNpde
    

    输入字段每X秒向上计数一次。 如果我输入“AAA”,我希望更新停止,因为 由于用户交互,输入是“脏的”。

    4 回复  |  直到 8 年前
        1
  •  0
  •   Murwa    8 年前

    您可以使用ngModelController来判断输入是否脏。 https://docs.angularjs.org/api/ng/directive/ngModel

    将plunker修改为 http://plnkr.co/edit/oJMrQZLugnzisqdXScvN?p=preview 更新函数如下所示

    this.update = function() {
        if(!$scope.frmPippo.pippo.$dirty)
          $scope.pippo += 1;
    }
    
        2
  •  0
  •   MarkoCen PaulT    8 年前

    添加 ngChange 输入元素上的属性,

    Update Plunker

     <input type=text ng-model="pippo" ng-change="userChanged()"/>
    
     //controller
     $scope.pippo = 1;
     $scope.isUserChanged = false;
     $scope.counter= 1;
    
     $scope.userChanged = function(){
        $scope.isUserChanged = true;
     }
    
     this.update = function() {
        if(!$scope.isUserChanged){
            $scope.pippo += 1;
        }
     }
     $interval(this.update, 3000);
    

    userChanged 将在用户键入时调用,但不会在以下情况下调用 pippo 被控制器中的其他方法更改,因此我们可以在 用户已更改 以指示输入是否已被用户覆盖

        3
  •  0
  •   daniel    8 年前

    如果我有问题,也许这就是你想做的?

    $scope.$watch("pippo", function(){
      if($scope.pippotmp != $scope.pippo)
         $scope.useredited = true;
    });
    

    更新的答案

    plunker

    您可以将模型与输入更改分离开来……放在一个临时变量中

        4
  •  0
  •   Kobi Cohen    8 年前

    我可能弄错了这个问题,但如果我正确理解你的话,那么ng模型选项就是你想要的。

    例如,您只能在用户离开输入时更新模型 ng model options=“{updateOn:'blur'}”

    您可以在文档中了解更多信息: https://docs.angularjs.org/api/ng/directive/ngModelOptions