2017-06-03 77 views
0

问题:


我试图用$scope.$watch方法上的号码输入使用严格的属性一样,maxminmaxlengthstep一个NG-模型。

当输入中插入的值超过任何这些属性时,ng模型将检索undefined

因此,最终会发生什么:$scope.$watch每当我们改变输入值时都会触发。一旦该值未定义,只有当插入的值再次为有效,换句话说,遵循属性规则(最大,最小,最大长度和步长)时才会再次触发。


例如,

用户输入: -2,4- - >$scope.$watch被触发,并输出,作为newValueundefined

用户增加了一个新的数字: -2,44 - >$scope.$watch不再被触发,这样一来。


main.js


$scope.$watch("user.input.base.sphere", function(newValue, oldValue) { 
console.log(newValue); 
} 

**的index.html


<input 
ng-cloak 
type="number" 
ng-class="user.settings.input.sphere.class" 
autocomplete="off" 
required  
name="sphere" 
id="in-sphere" 
title="Sphere" 
step="{{user.filter.sphere.step}}" 
min="{{user.filter.sphere.min}}" 
max="{{user.filter.sphere.max}}" 
maxlength="{{user.filter.sphere.maxlength}}" 
placeholder="{{user.filter.sphere.placeholder}}" 
ng-model="user.input.base.sphere" 
select-on-click 
sphere> 

问题:我怎么能还让$scope.$watch甚至在不确定ng-model

回答

1

您可以将下面的函数到ng-keyup指令被触发。此函数将获取对表单控件的引用,并读取用户键入的值,即使模型中的值尚未更新。

$scope.changeHandler = function (a) { 
    var element = angular.element(document.querySelector('#in-sphere'))[0]; 
    console.log(element.value); 
} 

它连接到你的表单控件与此: ng-keyup='changeHandler()'

Here is a working plunker

+0

这将是非常有益的,谢谢你,也为你的时间写下一个例子,这是很亲切从你 – Vladimir

+0

我必须指出,可悲的是,创建此方法后,执行时间比以前更长。但是,它在这一点上起作用 – Vladimir