Angularjs ng模糊模型';s的更新值在事件中不可用

Angularjs ng模糊模型';s的更新值在事件中不可用,angularjs,Angularjs,我使用ng模型选项来防止文本输入的模型在焦点丢失之前被更新。那部分都有用。但是,我需要在文本输入失去焦点和模型更新后处理事件。在这种情况下,我需要访问新模型的更新值,而不是旧模型 我试图使用ng blur事件,但是,在我的处理程序中,该值是旧值,而不是输入的新值。是我做错了什么,还是有更好的方法在文本输入失去焦点后获取新提交的模型值 <input type="text" ng-model-options="{ updateOn: 'blur', debounce:0 }" ng-model

我使用ng模型选项来防止文本输入的模型在焦点丢失之前被更新。那部分都有用。但是,我需要在文本输入失去焦点和模型更新后处理事件。在这种情况下,我需要访问新模型的更新值,而不是旧模型

我试图使用ng blur事件,但是,在我的处理程序中,该值是旧值,而不是输入的新值。是我做错了什么,还是有更好的方法在文本输入失去焦点后获取新提交的模型值

<input type="text"
ng-model-options="{ updateOn: 'blur', debounce:0 }"
ng-model="vm.myModel.amount"
ng-blur="vm.handleBlurEvent(vm.myModel.amount)" />


vm.handleBlurEvent = function(item)
{
            //alert(item.amount); //Old amount - not new amount entered
}

vm.handleBlurEvent=功能(项目)
{
//警报(item.amount);//旧金额-未输入新金额
}

用手表怎么样

模型更新后,您可以按如下方式执行逻辑:

 $scope.$watch('vm.myModel.amount', function (newVal, oldVal) {
        if (newVal != oldVal) {
         //do your logic here.
        }
    }, true);

我和黛博斯的运气还不错

但要让你的东西在这里工作就是代码

<form name="amountForm" >
     <input type="text" name="amount"
     ng-model-options="{ updateOn: 'blur', debounce:0 }"
     ng-model="vm.myModel.amount"
     ng-blur="vm.handleBlurEvent()" />
</form>

vm.handleBlurEvent = function()
{
     alert($scope.amountForm.amount.$viewValue);
}

vm.handleBlurEvent=函数()
{
警报($scope.amountForm.amount.amount.$viewValue);
}

享受…

谢谢你的建议。实际上,我通过在ng model options的updateOn属性中添加1个选项来实现这一点。通过添加“默认值”,一切正常

ng model options=“{updateOn:'default blur}”是诀窍

<input type="text"
ng-model-options="{ updateOn: 'default blur' }"
ng-model="vm.myModel.amount"
ng-blur="vm.handleBlurEvent(vm.myModel.amount)" />


vm.handleBlurEvent = function(item)
{
            //alert(item.amount); //new shows the NEW amount :-)
}

vm.handleBlurEvent=功能(项目)
{
//警报(item.amount);//新建显示新金额:-)
}

这是从以前的响应中修改的,延迟模型更新直到控制模糊,然后处理更改一次,无需反弹跳,模型值将在更改逻辑之前按预期设置

<input type="text"
ng-model-options="{ updateOn: 'blur' }"
ng-model="vm.myModel.amount"
ng-change="vm.handleChangeEvent(vm.myModel.amount)" />

vm.handleChangeEvent = function(item)
{
   alert(item.amount); //new shows the NEW amount :-)
}

vm.handleChangeEvent=函数(项)
{
警报(item.amount);//新建显示新金额:-)
}

老问题,但我找到了另一种读取此值的方法,我无法延迟删除去抖动,对我有效的方法是使用超时:

  $timeout(function(){
    var amount = this.formName.amount.value;
  });

我认为这是上面代码中的=ngModelController。

我创建了一个plunkr来演示-在没有默认关键字的情况下尝试它,它将不起作用-使用它它会……感谢plunkr,它真的帮助了调试!不过,您的解决方案有点缺陷,在子系统中添加“default”表示“使用默认的updateOn操作”。我认为我们想要的是将模型的更新延迟到模糊事件,因此保留updateOn:“blur”并使用ng change来执行函数,而不是ng blur-这很有意义,而且是一个更干净的实现:-)这应该被视为反模式。它会导致“超时地狱”,在那里不可能轻松地对代码中的事件顺序进行推理。最终,采用这种反模式的组件的用户将被迫使用$timeout。从此开始了通往地狱的旅程。