角度ng模型不会更新脏值

时间:2016-04-27 17:30:46

标签: angularjs angular-ngmodel

我想知道是否可以“防止”更新表单字段(输入,选择....),因为用户交互它是脏的。 如果我更新ng-model原语(即:将pippo从1设置为X)输入 即使我手动编辑控件也会更新。

可以防止这种情况吗?

demo page:

http://plnkr.co/edit/ClXoS7YVcEDtcApsNpde

输入字段每X秒计数一次。 如果我输入“AAA”我想更新STOP,因为 输入由于用户交互而“脏”。

4 个答案:

答案 0 :(得分:0)

如果我得到了问题,那么这就是你想要做的事情?

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

更新回答

plunker

您可以将模型与输入更改分开......在临时变量中

答案 1 :(得分:0)

在输入元素上添加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时不会调用它,因此我们可以在userChanged中设置一个标志来指示是否输入已被用户覆盖

答案 2 :(得分:0)

您可以使用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;
}

答案 3 :(得分:0)

我可能会提出错误的问题,但如果我理解正确,那么ng-model-option就是你要找的。

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

您可以在文档中详细了解它:https://docs.angularjs.org/api/ng/directive/ngModelOptions